JobScheduler的使用
来源:互联网 发布:剑灵天族身材数据 编辑:程序博客网 时间:2024/06/05 17:37
在进行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); } }}
注册:
<service android:name="com.example.jobschedulerdemo.MyJobService" android:permission="android.permission.BIND_JOB_SERVICE" ></service>
如果应用程序需要停止特定或所有工作,可以通过对JobScheduler对象调用cancel(int jobId)或cancelAll()实现。
1 1
- JobScheduler的使用
- JobScheduler API 的使用
- JobScheduler的使用
- JobScheduler 一些使用的坑
- 如何使用JobScheduler
- 使用Android JobScheduler优雅的处理后台数据
- Android中JobScheduler和JobService的简单使用示例
- android Jobscheduler的用法
- JobScheduler
- JobScheduler
- Android 5.0中使用JobScheduler
- 在Android中使用JobScheduler
- android JobScheduler 使用和分析
- Android里JobScheduler的实现
- JobScheduler使用中遇到的onStopJob没有回调的问题
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 宗教不自由与宗教发展——以北京基督教守望教会为例
- 挂载fedora安装光盘小系统squashfs.img命令
- 简陋的冰桶挑战小游戏
- Android apk动态加载机制的研究
- 使用jdbc操作mysql数据库
- JobScheduler的使用
- 【网络】HTTP2.0新特性
- git fetch与git pull的区别--多用git fetch
- HDU 4862 Jump (最大费用流 | 经典建图)
- 一台电脑同时安装不同的python、django版本
- Preferences.sublime-settings
- js框架jquery瀑布流图片墙效果代码下载,点击相册图片展示大图
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Android中处理崩溃异常和记录日志