Android 5.0中使用JobScheduler 调度作业

原理请看这边文章:http://blog.csdn.net/cuiran/article/details/42805057

本篇文章抄袭了这个作者的部分代码:http://blog.csdn.net/zhangyongfeiyong/article/details/51495791

在进行Android开发时,会遇到这样的情况:想在将来的某个时间或在一定条件下运行任务,如上传图片、下载歌曲等操作想在接入电源或连接到WIFI时执行。Android L提供了JobScheduler API。

当一组预定义的条件得到满足时,JobScheduler API的应用程序执行一项操作。不像AlarmManager类,JobScheduler的时间测定是不准确的。此外,该API能够一同批处理各种工作。

JobService:

public class MyJobService extends JobService {  
    private static final String TAG = "MyJobService";  
  
    /** 
     * false: 该系统假设任何任务运行不需要很长时间并且到方法返回时已经完成。 
     * true: 该系统假设任务是需要一些时间并且当任务完成时需要调用jobFinished()告知系统。 
     */  
    @Override  
    public boolean onStartJob(JobParameters params) {  
        Log.i(TAG, "Totally and completely working on job " + params.getJobId());  
        if (isNetworkConnected()) {  
            new SimpleDownloadTask().execute(params);  
            return true;  
        } else {  
            Log.i(TAG, "No connection on job " + params.getJobId() + "; sad face");  
        }  
        return false;  
    }  
  
    /** 
     * 当收到取消请求时,该方法是系统用来取消挂起的任务的。 
     * 如果onStartJob()返回false,则系统会假设没有当前运行的任务,故不会调用该方法。 
     */  
    @Override  
    public boolean onStopJob(JobParameters params) {  
        Log.i(TAG, "stop job " + params.getJobId());  
        return false;  
    }  
  
    private boolean isNetworkConnected() {  
        ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
        NetworkInfo info = manager.getActiveNetworkInfo();  
        return (info != null && info.isConnected());  
    }  
  
    private class SimpleDownloadTask extends  
            AsyncTask<JobParameters, Void, String> {  
  
        private JobParameters mJobParam;  
  
        @Override  
        protected String doInBackground(JobParameters... params) {  
            mJobParam = params[0];  
            try {  
                InputStream is = null;  
                int len = 50;  
                URL url = new URL("http://www.baidu.com");  
                HttpURLConnection conn = (HttpURLConnection) url  
                        .openConnection();  
                conn.setReadTimeout(10000);  
                conn.setConnectTimeout(15000);  
                conn.setRequestMethod("GET");  
                conn.connect();  
                int responseCode = conn.getResponseCode();  
                Log.i(TAG, "response code is : " + responseCode);  
                is = conn.getInputStream();  
                Reader reader = null;  
                reader = new InputStreamReader(is, "UTF-8");  
                char[] buffer = new char[len];  
                reader.read(buffer);  
                return new String(buffer);  
            } catch (Exception e) {  
                return "unable to retrieve web page";  
            }  
        }  
  
        @Override  
        protected void onPostExecute(String result) {  
            jobFinished(mJobParam, false);  
            Log.i(TAG, "获取结果:" + result);  
        }  
    }  
}  

调用:

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);  
        jobService = new ComponentName(this, MyJobService.class);  
        Intent service = new Intent(this, MyJobService.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);  
        int jobId;  
        for (int i = 0; i < 10; i++) {  
            jobId = i;  
            JobInfo jobInfo = new JobInfo.Builder(jobId, jobService)  
                    .setMinimumLatency(5000)// 设置任务运行最少延迟时间  
                    .setOverrideDeadline(60000)// 设置deadline,若到期还没有达到规定的条件则会开始执行  
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 设置网络条件  
                    .setRequiresCharging(true)// 设置是否充电的条件  
                    .setRequiresDeviceIdle(false)// 设置手机是否空闲的条件  
                    .build();  
            result.append("scheduling job " + i + "!\n");  
            scheduler.schedule(jobInfo);  
        }  
    }  
  
}  

需要在AndroidMainfest.xml中注册service

<service  
    android:name=".MyJobService"  
    android:permission="android.permission.BIND_JOB_SERVICE" >  
</service>  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值