保持Service不被Kill掉的方法--双Service守护,代码如下:

AndroidManifest.xml:

[java] view plaincopy
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name" >
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>
  9. <service
  10. android:name="ServiceOne"
  11. android:process=":remote" >
  12. <intent-filter>
  13. <action android:name="com.example.servicedemo.ServiceOne" />
  14. </intent-filter>
  15. </service>
  16. <service
  17. android:name="ServiceTwo"
  18. android:process=":remote" >
  19. <intent-filter>
  20. <action android:name="com.example.servicedemo.ServiceTwo" />
  21. </intent-filter>
  22. </service>

MainActivity.java:

[java] view plaincopy
  1. package com.example.servicedemo;
  2. import java.util.ArrayList;
  3. import android.app.Activity;
  4. import android.app.ActivityManager;
  5. import android.app.ActivityManager.RunningServiceInfo;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.os.Bundle;
  9. public class MainActivity extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. Intent serviceOne = new Intent();
  15. serviceOne.setClass(MainActivity.this, ServiceOne.class);
  16. startService(serviceOne);
  17. Intent serviceTwo = new Intent();
  18. serviceTwo.setClass(MainActivity.this, ServiceTwo.class);
  19. startService(serviceTwo);
  20. }
  21. public static boolean isServiceWorked(Context context, String serviceName) {
  22. ActivityManager myManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
  23. ArrayList<RunningServiceInfo> runningService = (ArrayList<RunningServiceInfo>) myManager.getRunningServices(Integer.MAX_VALUE);
  24. for (int i = 0; i < runningService.size(); i++) {
  25. if (runningService.get(i).service.getClassName().toString().equals(serviceName)) {
  26. return true;
  27. }
  28. }
  29. return false;
  30. }
  31. }

ServiceOne.java:

[java] view plaincopy
  1. package com.example.servicedemo;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. import android.app.Service;
  5. import android.content.Intent;
  6. import android.os.IBinder;
  7. import android.util.Log;
  8. public class ServiceOne extends Service {
  9. public final static String TAG = "com.example.servicedemo.ServiceOne";
  10. @Override
  11. public int onStartCommand(Intent intent, int flags, int startId) {
  12. Log.e(TAG, "onStartCommand");
  13. thread.start();
  14. return START_STICKY;
  15. }
  16. Thread thread = new Thread(new Runnable() {
  17. @Override
  18. public void run() {
  19. Timer timer = new Timer();
  20. TimerTask task = new TimerTask() {
  21. @Override
  22. public void run() {
  23. Log.e(TAG, "ServiceOne Run: "+System.currentTimeMillis());
  24. boolean b = MainActivity.isServiceWorked(ServiceOne.this, "com.example.servicedemo.ServiceTwo");
  25. if(!b) {
  26. Intent service = new Intent(ServiceOne.this, ServiceTwo.class);
  27. startService(service);
  28. Log.e(TAG, "Start ServiceTwo");
  29. }
  30. }
  31. };
  32. timer.schedule(task, 0, 1000);
  33. }
  34. });
  35. @Override
  36. public IBinder onBind(Intent arg0) {
  37. return null;
  38. }
  39. }

ServiceTwo.java:

[java] view plaincopy
  1. package com.example.servicedemo;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. import android.app.Service;
  5. import android.content.Intent;
  6. import android.os.IBinder;
  7. import android.util.Log;
  8. public class ServiceTwo extends Service {
  9. public final static String TAG = "com.example.servicedemo.ServiceTwo";
  10. @Override
  11. public int onStartCommand(Intent intent, int flags, int startId) {
  12. Log.e(TAG, "onStartCommand");
  13. thread.start();
  14. return START_REDELIVER_INTENT;
  15. }
  16. Thread thread = new Thread(new Runnable() {
  17. @Override
  18. public void run() {
  19. Timer timer = new Timer();
  20. TimerTask task = new TimerTask() {
  21. @Override
  22. public void run() {
  23. Log.e(TAG, "ServiceTwo Run: " + System.currentTimeMillis());
  24. boolean b = MainActivity.isServiceWorked(ServiceTwo.this, "com.example.servicedemo.ServiceOne");
  25. if(!b) {
  26. Intent service = new Intent(ServiceTwo.this, ServiceOne.class);
  27. startService(service);
  28. }
  29. }
  30. };
  31. timer.schedule(task, 0, 1000);
  32. }
  33. });
  34. @Override
  35. public IBinder onBind(Intent arg0) {
  36. return null;
  37. }
  38. }
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5673965.html,如需转载请自行联系原作者

保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2相关推荐

  1. Android 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  2. android进程守护 失效,保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 1...

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ?Android.content.Context ?and ...

  3. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 3

    第二部分: 做过android开发的人应该都知道应用会在系统资源匮乏的情况下被系统杀死!当后台的应用被系统回收之后,如何重新恢复它呢?网上对此问题有很多的讨论.这里先总结一下网上流传的各种解决方案,看 ...

  4. C# 强制关闭当前程序进程(完全Kill掉不留痕迹)

    C# 强制关闭当前程序进程(完全Kill掉不留痕迹) 原文:C# 强制关闭当前程序进程(完全Kill掉不留痕迹) C# 强制关闭当前程序进程(完全Kill掉不留痕迹) C#代码 /// <sum ...

  5. 为什么我的进程被kill掉了

    先来看段代码: 这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试 ...

  6. kill掉多个进程linux中的sudo,linux下批量kill进程的方法

    --kill某个用户下的所有进程(用户为test) --pkill # pkill -u test --killall # killall -u test --ps # ps -ef | grep t ...

  7. 在Service中发送广播被kill掉的Activity能不能收到?

    不能 请看下面的实践: 在发送广播前,Service会先打印消息,然后再发送广播,当Activity被kill掉后,Service会自动重启,然后继续发送广播,但是此时Activity都被kill了, ...

  8. Android Service被系统回收的解决方法

    自己的app的service总是容易被系统回收,搜罗了一下,基本上的解决思路有以下几种: 1.把service写成系统服务,将不会被回收(未实践): 在Manifest.xml文件中设置persist ...

  9. Android下写一个永远不会被KILL掉的进程/服务

    Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一 ...

最新文章

  1. 从0到1 html5 canvas,Html5 Canvas学习之路(五)
  2. JS重写提示框(confirm)
  3. iOS 通知观察者的被调函数不一定运行在主线程
  4. java calendar field_Java Calendar详解
  5. 做完项目,对css样式有新发现新感悟
  6. iOS Programming UIWebView 2
  7. CentOS6.8下安装xz命令
  8. 倪光南院士:云计算发展须和云安全同步推进
  9. linux soc 程序崩溃,SOC、FLCK和内存之间的关系,以3900X+X570为例(更新PCIE4.0)
  10. laravel mysql rand_Laravel-雄辩或流利的随机行
  11. Excel导入oracle的几种方法
  12. html怎么画虚线空心圆,PS如何画虚线圆圈 photoshop快速画虚线圆圈方法教程
  13. git创建分支develop,并合并到master
  14. 【C语言】BC90小乐乐算多少人被请家长(DAY 5)
  15. 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义
  16. app爬虫之航班数据获取
  17. Minio 分布式集群部署
  18. matlab中plot矢量长度,关于plot函数矢量长度弹错的问题
  19. 苹果怎么截图?教你各种iPhone机型截屏方法
  20. 有趣的神乐七奈桌面宠物+有自带BGM音效

热门文章

  1. VB6 中将数据导出到 Excel 提速之法
  2. 悬赏17万:美国“知乎”的沙雕问题,需要AI来识别
  3. 人工智能还能怎么玩?谷歌反手就是一个红狮子雕塑
  4. 苹果架构调整:AI、机器学习和Siri合并,由前谷歌AI负责人领导
  5. 活动合作 | 2018GAITC大会:AI领袖、应用指南、窥见风口,还能从中获得更多
  6. 百度宣布成立量子计算研究所,段润尧加盟任所长
  7. final关键字修饰类,方法以及变量的特点 学习
  8. Go语言练习:网络编程实例——简易图片上传网站
  9. iOS开发实践之网络检測Reachability
  10. 前端开发——模块化(html模块化开发)