简单记录一下把 当程序 进程结束掉之后 但服务依旧在后台运行 此jobService适用版本》=5.0 但并不适合
@TargetApi(Build.VERSION_CODES.M)
public class JobHandleServer extends JobService{
private int jobId=0;
private static final String TAG="case—JobHandleServer";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG,"onStartCommand");
scheduleJob(getJobInfo());
return START_NOT_STICKY;
}
@Override
public boolean onStartJob(JobParameters params) {
try {
PackageManager packageManager = getApplicationContext().getPackageManager();
Intent intent=new Intent();
intent = packageManager.getLaunchIntentForPackage(""); //这里参数就是你要打开的app的包名
startActivity(intent);
} catch (Exception e) {
Log.e("打开另外一个应用出错",e.getMessage()); //未打开,可能要打开的app没有安装,需要再此进行处理
}
Toast.makeText(this,"process start",Toast.LENGTH_SHORT).show();
Log.d(TAG,"onStartJob");
scheduleJob(getJobInfo());
startService(new Intent(this,LocalService.class));
startService(new Intent(this,RemoteService.class));
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d(TAG,"onStopJob");
startService(new Intent(this,LocalService.class));
startService(new Intent(this,RemoteService.class));
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
}
/**
* 任务调度
* @param j/将任务作业发送到作业调度中去
*/
private void scheduleJob(JobInfo j){
Log.e(TAG,"scheduleJob");
JobScheduler js= (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
js.schedule(j);
}
private JobInfo getJobInfo(){
JobInfo.Builder builder=new JobInfo.Builder(jobId++,new ComponentName(this,JobHandleServer.class));
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
return builder.build();
}
}
public class LocalService extends Service {
private static final String TAG="哈哈哈—LocalService";
private MyBinder binder;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG,"LocalService绑定成功~");
}
@Override
public void onServiceDisconnected(ComponentName name) {
//如果走这个方法代表本地服务和远程服务连接异常,这个时候就要启动远程服务
Log.d(TAG,"LocalService绑定失败~");
LocalService.this.startService(new Intent(LocalService.this,RemoteService.class));
//启动了远程服务之后还要和远程服务建立连接
LocalService.this.bindService(new Intent(LocalService.this,RemoteService.class),conn,Context.BIND_IMPORTANT);
}
};
@Override
public void onCreate() {
super.onCreate();
if (binder == null) {
binder = new MyBinder();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/**连接远程服务*/
bindService(new Intent(this, RemoteService.class), conn, Context.BIND_IMPORTANT);
return START_STICKY; /**表示这个服务被异常干掉依然会重启*/
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onDestroy() {
super.onDestroy();
}
private class MyBinder extends MyProcess.Stub {
@Override
public String getProcessName() throws RemoteException {
return "LocalService";
}
}
}
package com.my.immortalservice.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.util.Log;
import com.my.immortalservice.MyProcess;
/**
* Created by YJH on 2016/8/13.
*/
public class RemoteService extends Service {
private static final String TAG="哈哈哈—RemoteService";
private MyBinder binder;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG,"RemoteService绑定成功~");
}
@Override
public void onServiceDisconnected(ComponentName name) {
//如果走这个方法代表远程服务和本地服务连接异常,这个时候就要启动本地服务
Log.d(TAG,"RemoteService绑定失败~");
RemoteService.this.startService(new Intent(RemoteService.this,LocalService.class));
//启动了本地服务之后还要和本地服务建立连接
RemoteService.this.bindService(new Intent(RemoteService.this,LocalService.class),conn,Context.BIND_IMPORTANT);
}
};
@Override
public void onCreate() {
super.onCreate();
if (binder == null) {
binder = new MyBinder();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/**连接本地服务*/
bindService(new Intent(this, LocalService.class), conn, Context.BIND_IMPORTANT);
return START_STICKY; /**表示这个服务被异常干掉依然会重启*/
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onDestroy() {
super.onDestroy();
}
private class MyBinder extends MyProcess.Stub {
@Override
public String getProcessName() throws RemoteException {
return "RemoteService";
}
}
}