对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);
}
}
注册: