保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2
保持Service不被Kill掉的方法--双Service守护,代码如下:
AndroidManifest.xml:
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <service
- android:name="ServiceOne"
- android:process=":remote" >
- <intent-filter>
- <action android:name="com.example.servicedemo.ServiceOne" />
- </intent-filter>
- </service>
- <service
- android:name="ServiceTwo"
- android:process=":remote" >
- <intent-filter>
- <action android:name="com.example.servicedemo.ServiceTwo" />
- </intent-filter>
- </service>
MainActivity.java:
- package com.example.servicedemo;
- import java.util.ArrayList;
- import android.app.Activity;
- import android.app.ActivityManager;
- import android.app.ActivityManager.RunningServiceInfo;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Intent serviceOne = new Intent();
- serviceOne.setClass(MainActivity.this, ServiceOne.class);
- startService(serviceOne);
- Intent serviceTwo = new Intent();
- serviceTwo.setClass(MainActivity.this, ServiceTwo.class);
- startService(serviceTwo);
- }
- public static boolean isServiceWorked(Context context, String serviceName) {
- ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) myManager.getRunningServices(Integer.MAX_VALUE);
- for (int i = 0; i < runningService.size(); i++) {
- if (runningService.get(i).service.getClassName().toString().equals(serviceName)) {
- return true;
- }
- }
- return false;
- }
- }
ServiceOne.java:
- package com.example.servicedemo;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.util.Log;
- public class ServiceOne extends Service {
- public final static String TAG = "com.example.servicedemo.ServiceOne";
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.e(TAG, "onStartCommand");
- thread.start();
- return START_STICKY;
- }
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- Timer timer = new Timer();
- TimerTask task = new TimerTask() {
- @Override
- public void run() {
- Log.e(TAG, "ServiceOne Run: "+System.currentTimeMillis());
- boolean b = MainActivity.isServiceWorked(ServiceOne.this, "com.example.servicedemo.ServiceTwo");
- if(!b) {
- Intent service = new Intent(ServiceOne.this, ServiceTwo.class);
- startService(service);
- Log.e(TAG, "Start ServiceTwo");
- }
- }
- };
- timer.schedule(task, 0, 1000);
- }
- });
- @Override
- public IBinder onBind(Intent arg0) {
- return null;
- }
- }
ServiceTwo.java:
- package com.example.servicedemo;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.util.Log;
- public class ServiceTwo extends Service {
- public final static String TAG = "com.example.servicedemo.ServiceTwo";
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.e(TAG, "onStartCommand");
- thread.start();
- return START_REDELIVER_INTENT;
- }
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- Timer timer = new Timer();
- TimerTask task = new TimerTask() {
- @Override
- public void run() {
- Log.e(TAG, "ServiceTwo Run: " + System.currentTimeMillis());
- boolean b = MainActivity.isServiceWorked(ServiceTwo.this, "com.example.servicedemo.ServiceOne");
- if(!b) {
- Intent service = new Intent(ServiceTwo.this, ServiceOne.class);
- startService(service);
- }
- }
- };
- timer.schedule(task, 0, 1000);
- }
- });
- @Override
- public IBinder onBind(Intent arg0) {
- return null;
- }
- }
保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2相关推荐
- Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context ↳an ...
- android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...
- 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3
第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...
- C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
C# 强制关闭当前程序进程(完全Kill掉不留痕迹) 原文:C# 强制关闭当前程序进程(完全Kill掉不留痕迹) C# 强制关闭当前程序进程(完全Kill掉不留痕迹) C#代码 /// <sum ...
- 为什么我的进程被kill掉了
先来看段代码: 这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试 ...
- kill掉多个进程linux中的sudo,linux下批量kill进程的方法
--kill某个用户下的所有进程(用户为test) --pkill # pkill -u test --killall # killall -u test --ps # ps -ef | grep t ...
- 在Service中发送广播被kill掉的Activity能不能收到?
不能 请看下面的实践: 在发送广播前,Service会先打印消息,然后再发送广播,当Activity被kill掉后,Service会自动重启,然后继续发送广播,但是此时Activity都被kill了, ...
- Android Service被系统回收的解决方法
自己的app的service总是容易被系统回收,搜罗了一下,基本上的解决思路有以下几种: 1.把service写成系统服务,将不会被回收(未实践): 在Manifest.xml文件中设置persist ...
- Android下写一个永远不会被KILL掉的进程/服务
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一 ...
最新文章
- 从0到1 html5 canvas,Html5 Canvas学习之路(五)
- JS重写提示框(confirm)
- iOS 通知观察者的被调函数不一定运行在主线程
- java calendar field_Java Calendar详解
- 做完项目,对css样式有新发现新感悟
- iOS Programming UIWebView 2
- CentOS6.8下安装xz命令
- 倪光南院士:云计算发展须和云安全同步推进
- linux soc 程序崩溃,SOC、FLCK和内存之间的关系,以3900X+X570为例(更新PCIE4.0)
- laravel mysql rand_Laravel-雄辩或流利的随机行
- Excel导入oracle的几种方法
- html怎么画虚线空心圆,PS如何画虚线圆圈 photoshop快速画虚线圆圈方法教程
- git创建分支develop,并合并到master
- 【C语言】BC90小乐乐算多少人被请家长(DAY 5)
- 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义
- app爬虫之航班数据获取
- Minio 分布式集群部署
- matlab中plot矢量长度,关于plot函数矢量长度弹错的问题
- 苹果怎么截图?教你各种iPhone机型截屏方法
- 有趣的神乐七奈桌面宠物+有自带BGM音效