当项目中有大量的查询数据库操作的时候, 这时候就应该封装起来了....不必每次都写Handler...

用法:

/** * 线程调度器 */SchedulerUtils.getInstance().run(new SubThreadRunInterface() {    @Override    public DataBean run() {        UserData meng = new UserData("孟帅比", 18);        try {            Thread.sleep(5000);        } catch (InterruptedException e) {            e.printStackTrace();        }        return meng;    }}, new OnGetDataFinishInterface() {    @Override    public void datafinish(DataBean data) {        //相应....        UserData meng= (UserData) data;        Log.d("孟帅比 -- ", meng.getName());    }});/** * 如果在写一个呢.... */SchedulerUtils.getInstance().run(new SubThreadRunInterface() {    @Override    public DataBean run() {        UserData meng = new UserData("芦帅比", 18);        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        return meng;    }}, new OnGetDataFinishInterface() {    @Override    public void datafinish(DataBean data) {        UserData meng= (UserData) data;        Log.d("芦帅比 -- ", meng.getName());    }});/** * 现在遇到一个问题就是如果已经有一个handler了, 那在创建一个呢, */

工具类:


核心类代码:

package com.diandou.demo44_threadscheduler.scheduler;import android.os.Handler;import android.os.Message;/** * 一个线程调度器, * !!! 谨记当前类一定要在主线程中调用执行 * Created by baiya on 2018/3/15. */public class SchedulerUtils<T extends DataBean> {    private volatile static SchedulerUtils instance;    /**     * 私有构造函数     */    private SchedulerUtils() {}    /**     * 假的单例模式....     * 如果是单例的话, 那就只有一个Handler对象这样响应的不一定是想对应的接口....     * 暂时这么改.....     * @return     */    public static SchedulerUtils getInstance() {        instance = new SchedulerUtils();        return instance;    }    public static final int msgWhat = 1;    /**     * 这个Handler对象默认也会在     */    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case msgWhat:                    T data = (T) msg.obj;                    if (data != null && mFinishInterface != null) {                        mFinishInterface.datafinish(data);                        handler = null;//防止内存泄漏                    }                    break;            }        }    };    private SubThreadRunInterface<T> mRunInterface;    private OnGetDataFinishInterface<T> mFinishInterface;    /**     * 要执行子查询事件的方法...     *     * @param runInterface 执行耗时操作, 返回得到的数据对象     * @param finishInterface 是一个回调, 回调相应得到的数据对象的     */    public void run(SubThreadRunInterface<T> runInterface, OnGetDataFinishInterface<T> finishInterface) {        this.mRunInterface = runInterface;        this.mFinishInterface = finishInterface;        new Thread(new Runnable() {            @Override            public void run() {                if (mRunInterface != null) {                    T data = mRunInterface.run();                    if (data != null) {                        Message message = new Message();                        message.obj = data;                        message.what = msgWhat;                        handler.sendMessage(message);                    }                }            }        }).start();    }}
package com.diandou.demo44_threadscheduler.scheduler;/** * 在子线程执行耗时操作之后, 返回数据对象 * Created by baiya on 2018/3/16. */public interface SubThreadRunInterface<T extends DataBean> {    /**     * 执行耗时操作     * @return 得到这个对象     */    T run();}
package com.diandou.demo44_threadscheduler.scheduler;/** * 数据拿到之后相应的监听器 * Created by baiya on 2018/3/16. */public interface OnGetDataFinishInterface<T extends DataBean> {    /**     * 数据相应接口     * @param data 数据对象     */    void datafinish(T data);}
package com.diandou.demo44_threadscheduler.scheduler;/** * Created by baiya on 2018/3/16. */public interface DataBean {}

更多相关文章

  1. Android为多媒体文件生成缩略图
  2. Android(安卓)四大组件之 Service(二)
  3. 【学习Android(安卓)NDK开发】native code通过JNI调用Java方法
  4. Android适配器之-----SimpleAdapter
  5. android常用知识(累计)
  6. 33、多线程断点下载的实现&界面的更新
  7. android 音乐频谱
  8. Java和Javascript互调的例子 ---------(Android(安卓)WebView 中)
  9. Android中的高效率的数据库操作框架----LitePal

随机推荐

  1. 仿京东移动端首页的"部分"样式
  2. 首页秒杀区
  3. python怎么查询快递信息?快递查询接口大全
  4. flex 实现秒杀布局
  5. html前端常用控件的用法
  6. flex实战项目:模仿某东首页
  7. mysql当查询某字段结果为空并赋值
  8. 怎么用java调用快递查询和识别接口?
  9. 初探javaScript
  10. 常量、变量与函数