Android 双进程守护
16lz
2021-01-23
本地服务code:`
package app.project.service;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import app.project.IMyAidlInterface;
public class LocalService extends Service {
MyBinder binder;
MyConn conn;
@Nullable@Overridepublic IBinder onBind(Intent intent) { return binder;}@Overridepublic void onCreate() { super.onCreate(); binder = new MyBinder(); conn = new MyConn();}class MyBinder extends IMyAidlInterface.Stub { @Override public String getServiceName() throws RemoteException { return LocalService.class.getSimpleName(); }}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(LocalService.this, " 本地服务started", Toast.LENGTH_SHORT).show(); this.bindService(new Intent(LocalService.this, RomoteService.class), conn, Context.BIND_IMPORTANT); return START_STICKY;}class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { } @Override public void onServiceDisconnected(ComponentName name) { Toast.makeText(LocalService.this, "远程服务killed", Toast.LENGTH_SHORT).show(); //开启远程服务 LocalService.this.startService(new Intent(LocalService.this, RomoteService.class)); //绑定远程服务 LocalService.this.bindService(new Intent(LocalService.this, RomoteService.class), conn, Context.BIND_IMPORTANT); }}@Overridepublic void onDestroy() { super.onDestroy(); //开启远程服务 LocalService.this.startService(new Intent(LocalService.this, RomoteService.class)); //绑定远程服务 LocalService.this.bindService(new Intent(LocalService.this, RomoteService.class), conn, Context.BIND_IMPORTANT);}
}
远程服务code:
package app.project.service;import android.app.Service;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;import android.widget.Toast;import app.project.IMyAidlInterface;public class RomoteService extends Service { MyConn conn; MyBinder binder; @Nullable @Override public IBinder onBind(Intent intent) { return binder; } @Override public void onCreate() { super.onCreate(); conn = new MyConn(); binder = new MyBinder(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, " 远程服务started", Toast.LENGTH_SHORT).show(); this.bindService(new Intent(this, LocalService.class), conn, Context.BIND_IMPORTANT); return START_STICKY; } class MyBinder extends IMyAidlInterface.Stub { @Override public String getServiceName() throws RemoteException { return RomoteService.class.getSimpleName(); } } class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { } @Override public void onServiceDisconnected(ComponentName name) { Toast.makeText(RomoteService.this, "本地服务killed", Toast.LENGTH_SHORT).show(); //最关键的还是这两句话 //开启本地服务 RomoteService.this.startService(new Intent(RomoteService.this, LocalService.class)); //绑定本地服务 RomoteService.this.bindService(new Intent(RomoteService.this, LocalService.class), conn, Context.BIND_IMPORTANT); } } @Override public void onDestroy() { super.onDestroy(); //开启本地服务 RomoteService.this.startService(new Intent(RomoteService.this, LocalService.class)); //绑定本地服务 RomoteService.this.bindService(new Intent(RomoteService.this, LocalService.class), conn, Context.BIND_IMPORTANT); }}
aidl文件:
package app.project;
// Declare any non-default types here with import statements
interface IMyAidlInterface {
String getServiceName();
}
配置文件
<service android:name=".service.LocalService" android:enabled="true" android:exported="true" /> <service android:name=".service.RomoteService" android:process=":romoteservice" android:enabled="true" android:exported="true">service>
更多相关文章
- mainfest文件中android属性
- ~/.dirlst 文件
- Android 读取和保存文件(手机内置存储器)
- Android——文件存储
- Android layout文件中 '?' 的作用
- :如何安装apk文件在Android仿真器中
- Android官方架构组件DataBinding双向绑定篇: 观察者模式的殊途同
- Android build.gradle文件详解(转述自《Android第一行代码》第二