如何使用JobScheduler

对android开发程序员来说,如何让自己的ap程序保活(尽量长久的不被系统杀死或者杀死后能自动恢复)是个很头疼的问题。受安全性影响,系统在内存不足或者ap在后台长时间未运行的时候都会被系统回收。
在L版本之前,通过service、修改[native进程](http://blog.csdn.net/marswin89/article/details/50917098%20+%20MarsDaemon%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)可以起效。但在5.0以后貌似就不起作用。不过Android L提供了JobScheduler API,亲测,一星期后台仍运行正常。
当一组预定义的条件得到满足时,JobScheduler API的应用程序执行一项操作。不像AlarmManager类,JobScheduler的时间测定是不准确的。此外,该API能够一同批处理各种工作。
public class TestJobService extends JobService {  
private static final String TAG = "TestJobService ";  

privte Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg){
        Log.i(TAG, "handleMessage is called...");  
    }
};
/** 
 * false: 该系统假设任何任务运行不需要很长时间并且到方法返回时已经完成。 
 * true: 该系统假设任务是需要一些时间并且当任务完成时需要调用jobFinished()告知系统。 
 */  
@Override  
public boolean onStartJob(JobParameters params) {  
    handler.sendEmptyMessage(1);
    return true; 
}  

/** 
 * 当收到取消请求时,该方法是系统用来取消挂起的任务的。 
 * 如果onStartJob()返回false,则系统会假设没有当前运行的任务,故不会调用该方法。 
 */  
@Override  
public boolean onStopJob(JobParameters params) {  
    Log.i(TAG, "stop job " + params.getJobId());  
    return false;  
} 

}

调用:

public class MainActivity extends Activity {

private TextView result;  
private ComponentName jobService;  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  

    Intent service = new Intent(this, TestJobService.class);  
    startService(service);  

    result = (TextView) findViewById(R.id.result_tv);  
    Button btn = (Button) findViewById(R.id.button);  
    btn.setOnClickListener(new OnClickListener() {  

        @Override  
        public void onClick(View v) {  
            pollServer();  
        }  
    });  
}  

private void pollServer() {  
    JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);  

    JobInfo jobInfo = new JobInfo.Builder(jobId, jobService)  
            .setMinimumLatency(5000)// 设置任务运行最少延迟时间  
            .setOverrideDeadline(60000)// 设置deadline,若到期还没有达到规定的条件则会开始执行  
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 设置网络条件  
            .setRequiresCharging(true)// 设置是否充电的条件  
            .setRequiresDeviceIdle(false)// 设置手机是否空闲的条件  
            .build();  
        scheduler.schedule(jobInfo);          
}    

}

注册:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值