android 两个service实现相互保活

1,实现原理,2个service不在同一个进程中,一个A进程,一个B进程,A和B通过广播机制来通讯,当A进程被杀死的时候,发送广播给B进程,B进程收到广播后再次启动A服务,相反的B进程被杀死,由A来重新启动。

2,A 服务的源码如下:

public class ServiceOne extends Service {

    String TAG="ServiceOne";
    @Override
    public void onCreate() {
        super.onCreate();
        registerBroadcast();
        LogUtil.d(TAG,"ServiceOne onCreate");
    }
    void registerBroadcast(){
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction("com.foxconn.androidlib.ServiceTwoKilled");
        registerReceiver(mReceiver, mFilter);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        Intent intent = new Intent();
        intent.setAction("com.foxconn.androidlib.ServiceOneKilled");
        sendBroadcast(intent);
        unregisterReceiver(mReceiver);
        LogUtil.d(TAG,"ServiceOne onDestroy");
        super.onDestroy();
    }


    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            LogUtil.d(TAG,"ServiceOne onReceive 执行");
            Intent service = new Intent("com.foxconn.androidlib.brodcast.ServiceTwo");
            String packageName = "com.foxconn.androidlib";//需要开启服务的app包名
            service.setComponent(new ComponentName(packageName, "com.foxconn.androidlib.brodcast.ServiceTwo"));
            startService(service);
        }
    };
}

 

3,B服务的源码如下:

public class ServiceTwo extends Service {
    String TAG="ServiceTwo";
    @Override
    public void onCreate() {
        super.onCreate();
        registerBroadcast();
        LogUtil.d(TAG,"ServiceTwo onCreate");
        count();

    }

    void count(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    LogUtil.d(TAG,"一直打印"+new Random().nextLong());
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

    }

    void registerBroadcast(){
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction("com.foxconn.androidlib.ServiceOneKilled");
        registerReceiver(mReceiver, mFilter);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        Intent intent = new Intent();
        intent.setAction("com.foxconn.androidlib.ServiceTwoKilled");
        sendBroadcast(intent);
        unregisterReceiver(mReceiver);
        LogUtil.d(TAG,"ServiceTwo onDestroy");
        super.onDestroy();
    }


    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            LogUtil.d(TAG,"ServiceTwo onReceive 执行");
            Intent service = new Intent("com.foxconn.androidlib.brodcast.ServiceOne");
            String packageName = "com.foxconn.androidlib";//需要开启服务的app包名
            service.setComponent(new ComponentName(packageName, "com.foxconn.androidlib.brodcast.ServiceOne"));
            startService(service);
        }
    };
}

4,AndroidManifest.xml 代码如下:

        <service
            android:name="com.foxconn.androidlib.brodcast.ServiceOne"
            android:exported="true"
            android:process=":ServiceOne">
        </service>
        <service
            android:name="com.foxconn.androidlib.brodcast.ServiceTwo"
            android:exported="true"
            android:process=":ServiceTwo">
        </service>

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值