1. 简介 
Android Priority Job Queue是一款专门为Android编写,实现了Job Queue的后台任务队列按优先级处理
github地址:https://github.com/path/android-priority-jobqueue ,直接下载使用,貌似demo不能正常运行,参考其他资料自己写了一个demo: https://github.com/HungryGoogle/LeeArchtecture.git


2. 背景 
几乎所有的应用程序都存在后台线程工作。这些“背景任务”需要保持应用程序响应性和鲁棒性,特别是在不利的情况下(如有限的网络连接)。在安卓应用中,有几种方法来实现后台工作: 
1) 异步任务: 
2) 使用service: 
3) 本文讲的Android Priority Job Queue 作业队列提供了一个很好的框架来完成上述所有的工作。当确定了你的后台任务的工作时,将它们作为Job添加到你jobmanager实例。Job Manage会照顾优先级,持久性,负载平衡,延迟,网络控制,分组等,它还提供了一个很好的生命周期,为工作提供一个更好的,一致的用户体验。 


3. 使用(基于android studio) 
1.添加依赖

compile 'com.birbit:android-priority-jobqueue:1.3.5'
  • 1

2.创建Application并配置JobManager

public class AppApplication extends Application{    private JobManager jobManager;    public static AppApplication instance;    @Override    public void onCreate() {        super.onCreate();        configureJobManager();    }    public AppApplication(){        instance=this;    }    public JobManager getJobManager() {        return jobManager;    }    public static AppApplication getInstance() {        return instance;    }    private void configureJobManager() {        Configuration configuration = new Configuration.Builder(this)                .customLogger(new CustomLogger() {                    private static final String TAG = "JOBS";                    @Override                    public boolean isDebugEnabled() {                        return true;                    }                    @Override                    public void d(String text, Object... args) {                        Log.i(TAG, String.format(text, args));                    }                    @Override                    public void e(Throwable t, String text, Object... args) {                        Log.e(TAG, String.format(text, args), t);                    }                    @Override                    public void e(String text, Object... args) {                        Log.e(TAG, String.format(text, args));                    }                })                .minConsumerCount(1)//always keep at least one consumer alive                .maxConsumerCount(3)//up to 3 consumers at a time                .loadFactor(3)//3 jobs per consumer                .consumerKeepAlive(120)//wait 2 minute                .build();        jobManager = new JobManager(this, configuration);    }}


3.创建Job任务

public class MJob extends Job {    private static final String TAG = "LeeTest------->";    private String text;    /**     * 初始化任务,将text作为优先级,也作为任务号     * @param text 必须为整形的字符串 需要作为job的优先级使用 比如 1     *             {@code com.example.li.leeandroidpriorityjobqueue. MJob#onAdded}     */    public MJob(String text) {        super(new Params(Integer.parseInt(text)).persist());        this.text = text;        Log.i(TAG, text + "  init");    }    @Override    public void onAdded() {        Log.i(TAG, text + "  Onadded to task list");    }    @Override    public void onRun() throws Throwable {        Log.i(TAG, text + "  onRun");        Thread.sleep(1000);    }    @Override    protected RetryConstraint shouldReRunOnThrowable(Throwable throwable, int runCount,int maxRunCount) {        return RetryConstraint.createExponentialBackoff(runCount, 1000);    }    @Override    protected void onCancel() {        Log.i(TAG, text + "  onCancel");    }}

4.MainActivity

public class MainActivity extends AppCompatActivity {    private JobManager jobManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        jobManager = AppApplication.getInstance().getJobManager();        Button btn_start = (Button) findViewById(R.id.btn_start);        btn_start.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                jobManager.addJobInBackground(new MJob("1"));                jobManager.addJobInBackground(new MJob("2"));                jobManager.addJobInBackground(new MJob("3"));                jobManager.addJobInBackground(new MJob("4"));                jobManager.addJobInBackground(new MJob("5"));                jobManager.addJobInBackground(new MJob("6"));                jobManager.addJobInBackground(new MJob("7"));                jobManager.addJobInBackground(new MJob("8"));                jobManager.addJobInBackground(new MJob("9"));                jobManager.addJobInBackground(new MJob("18"));                jobManager.addJobInBackground(new MJob("28"));                jobManager.addJobInBackground(new MJob("38"));                jobManager.addJobInBackground(new MJob("48"));                jobManager.addJobInBackground(new MJob("58"));                jobManager.addJobInBackground(new MJob("68"));                jobManager.addJobInBackground(new MJob("78"));                jobManager.addJobInBackground(new MJob("88"));            }        });    }}

添加权限

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

设置application<application    android:name=".AppApplication"

code : https://github.com/HungryGoogle/LeeArchtecture.git

4.执行结果 

09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 1  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 2  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 3  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 4  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 5  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 6  init09-06 09:20:56.235 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 7  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 8  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 9  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 18  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 28  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 38  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 48  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 58  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 68  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 78  init09-06 09:20:56.236 15211-15211/com.example.androidpriorityjobqueue I/LeeTest------->: 88  init09-06 09:20:56.245 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 1  Onadded to task list09-06 09:20:56.259 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 1  onRun09-06 09:20:56.265 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 2  Onadded to task list09-06 09:20:56.269 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 2  onRun09-06 09:20:56.275 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 3  Onadded to task list09-06 09:20:56.284 15211-15277/com.example.androidpriorityjobqueue I/LeeTest------->: 3  onRun09-06 09:20:56.289 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 4  Onadded to task list09-06 09:20:56.298 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 5  Onadded to task list09-06 09:20:56.306 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 6  Onadded to task list09-06 09:20:56.315 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 7  Onadded to task list09-06 09:20:56.323 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 8  Onadded to task list09-06 09:20:56.332 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 9  Onadded to task list09-06 09:20:56.340 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 18  Onadded to task list09-06 09:20:56.349 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 28  Onadded to task list09-06 09:20:56.357 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 38  Onadded to task list09-06 09:20:56.366 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 48  Onadded to task list09-06 09:20:56.374 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 58  Onadded to task list09-06 09:20:56.386 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 68  Onadded to task list09-06 09:20:56.399 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 78  Onadded to task list09-06 09:20:56.410 15211-15276/com.example.androidpriorityjobqueue I/LeeTest------->: 88  Onadded to task list09-06 09:20:57.279 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 88  onRun09-06 09:20:57.286 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 78  onRun09-06 09:20:57.299 15211-15277/com.example.androidpriorityjobqueue I/LeeTest------->: 68  onRun09-06 09:20:58.303 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 58  onRun09-06 09:20:58.312 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 48  onRun09-06 09:20:58.321 15211-15277/com.example.androidpriorityjobqueue I/LeeTest------->: 38  onRun09-06 09:20:59.329 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 28  onRun09-06 09:20:59.337 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 18  onRun09-06 09:20:59.343 15211-15277/com.example.androidpriorityjobqueue I/LeeTest------->: 9  onRun09-06 09:21:00.346 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 8  onRun09-06 09:21:00.354 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 7  onRun09-06 09:21:00.358 15211-15277/com.example.androidpriorityjobqueue I/LeeTest------->: 6  onRun09-06 09:21:01.376 15211-15279/com.example.androidpriorityjobqueue I/LeeTest------->: 5  onRun09-06 09:21:01.386 15211-15278/com.example.androidpriorityjobqueue I/LeeTest------->: 4  onRun


更多相关文章

  1. android 下载进度条的实现
  2. Android(安卓)AsyncTask 异步任务取消
  3. android后台上传数据demo
  4. Android(安卓)AsyncTask实例
  5. Android(安卓)实现Activity后台运行
  6. Android(安卓)实现Activity后台运行
  7. android 线程优先级设置方法
  8. android用于定时任务工具类
  9. Android任务栏的图标显示

随机推荐

  1. Android(安卓)SDK中的强大工具——Monito
  2. Windows下Qt for Android(安卓)编译安卓C
  3. android使用透明色
  4. Android(安卓)Context 上下文 你必须知道
  5. Android(安卓)RxJava实际应用教学:你该什
  6. Android四大组件:Service史上最全面解析
  7. Android实践之Drawable的使用
  8. Android学习感悟之消息机制
  9. android 通过Application类 共享全局数据
  10. Android(安卓)9.0 (P)