JobService 后台服务

简单记录一下把 当程序 进程结束掉之后 但服务依旧在后台运行 此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";
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值