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工作学习笔记之ANDROID:SCALETYPE的秘密
  2. android后台上传数据demo
  3. Android 从后台进入前台
  4. Android Service后台处理结果给Activity
  5. Android 实现Activity后台运行
  6. 2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
  7. Android NFC近场通信02----读写卡的准备工作

随机推荐

  1. 传统定位和flex定位
  2. css-flex布局
  3. 【CSS入门】理解css中min-width和max-wid
  4. 210323 CSS 盒子模型 字体图标 定位
  5. 万岳教育直播源码,教育app源码,教育系统
  6. 固定定位:模态框
  7. 苹果Mac强大的思维导图工具:SimpleMind
  8. 如何选择好的运维服务商?
  9. 红帽认证培训(红帽认证视频教程、在线课程
  10. 采用XLL封装工作表函数的演示,确保工作表