[mobilesafe] 04_不死服务

Android 4.0

不死服务

Service
后台运行的组件
 
默认不在单独进程里
 
运行在主线程
 
可以理解为无界面的activity
如何尽量保证自己不被杀死?
1. 尽量保证自己不容易被杀死.
2. 即使自己被杀死,快速复活能力,然后将杀死别人. 
锁屏 外拨电话 短信到来 sd卡挂载,(注册这些事件,然后开启自己)
电量变化的广播事件(系统应用才能注册,小米miui是)
3. 91手机助手
两个进程互相守护(一个挂掉,另外一个开启它)  依赖电脑(应用被卸载,usb线插上电脑,又重新开启)
不死的服务Service:一个服务停止了,开启另外一个服务,另外一个服务挂了,又重新开启这个服务。
Service1.java
package cn.zengfansheng.undieservice;
 
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
 
public class Service1 extends Service {
 
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("Service1---Service1创建");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("Service1---Service1停止");
        Intent intent = new Intent(this, Service2.class);
        startService(intent);
    }
}
Service2.java
package cn.zengfansheng.undieservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class Service2 extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("Service1---Service2创建");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Intent intent = new Intent(this, Service1.class);
        startService(intent);
        System.out.println("Service1---Service2停止");
    }
}
但下面这种情况,可以被杀死掉:
1、如果用户点击,强行停止,就会被杀死

2、如果遇到一些具备root权限的应用如lbe,使用linux命令  kill 9 cn.zengfansheng.undieservice   也可以杀死自己。
问题:这是由于开启服务时使用了startActivity(...)来开启一个服务
解决:startService(..)
11-23 07:18:10.534: E/AndroidRuntime(2021): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {cn.zengfansheng.receiverreboot/cn.zengfansheng.receiverreboot.SmsReceiverServices}; have you declared this activity in your
AndroidManifest.xml?