美文网首页
Android一个界面多个耗时操作

Android一个界面多个耗时操作

作者: 面包石头 | 来源:发表于2017-09-13 15:31 被阅读39次

需求:

一个Activity有2个EditTextPreference,EditTextPreference的内容获取耗时较长

方法:

1.定义接口TimeConsumingListener


public  interface TimeConsumingListener{
    void onStarted(TimeConsumingPreference handler);
    void onFinished(TimeConsumingPreference handler);
}

2.自定义EditTextPreference


public class TimeConsumingPreference extends EditTextPreference {
    private TimeConsumingListener mListener;
    private Handler mHandler;

    public TimeConsumingPreference(Context context) {
        this(context, null);
    }

    public TimeConsumingPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        mHandler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
               //操作完成调用结束方法
                mListener.onFinished(TimeConsumingPreference.this);
            }
        };
    }

    void init(TimeConsumingListener listener) {
        mListener = listener;
        if (mListener != null) {
            mHandler.sendEmptyMessageDelayed(0, 5 * 1000);
            mListener.onStarted(this);
        }
    }
}

3.在Activity中的onCreate中将需要耗时的Preference加入到ArrayList中


        mPreferences.add(mCPUKey);
        mPreferences.add(mROMKey);

4.在onResume中开始第一个耗时操作


mPreferences.get(mInitIndex).init(this);

5.Activity实现TimeConsumingListener接口,onStarted方法

    @Override
    public void onStarted(TimeConsumingPreference p) {
        mBusyList.add(p.getKey());
        if (mIsForground) {
            showDialog(DIALOG_READING_ID);
        }
    }

6.Activity实现TimeConsumingListener接口,onFinished方法

    @Override
    public void onFinished(TimeConsumingPreference p) {
        if (mInitIndex < mPreferences.size() - 1 && !isFinishing()) {
            mInitIndex++;
           //进行下一个耗时操作
            mPreferences.get(mInitIndex).init(this);
        }
        mBusyList.remove(p.getKey());
        if (mBusyList.isEmpty()) {
            this.dismissDialog(DIALOG_READING_ID);
        }
        p.setEnabled(true);
    }

相关文章

  • Android一个界面多个耗时操作

    需求: 方法: 1.定义接口TimeConsumingListener 2.自定义EditTextPreferen...

  • Android中的onNewIntent()函数

    1.Activity的四种启动模式 在Android中每个界面都是一个Activity,切换界面操作其实是多个...

  • Python 多线程

    多线程 1.耗时操作 1.1耗时操作放到主线程中的问题: 耗时操作放到主线程中,会阻塞线程 多个耗时操作都放到一个...

  • 【Android 基础】AsynTask 异步任务

    AsynTask 异步任务 Android机制,不允许子线程更新UI界面,耗时操作需要开辟新的Thread执行; ...

  • day18-多线程

    1. 耗时操作 耗时操作放到主线程中的问题:耗时操作放到主线程中,会阻塞线程多个耗时操作都放到一个线程中执行,最终...

  • Day17-多线程

    1、耗时操作 耗时操作放到主线程中的问题:耗时操作放到主线程中,会阻塞线程多个耗时操作都放到一个线程中执行,最终执...

  • 多线程

    耗时操作 1.耗时操作放到主线程中的问题:耗时操作放到主线程中,会阻塞线程多个耗时操作都放到一个线程中执行,最终执...

  • day18-多线程

    一、耗时操作 1.耗时操作放到主线程中的问题:耗时操作放到主线程中,会阻塞线程多个耗时操作都放到一个线程中执行,最...

  • Android中的线程和线程池

    Android中的线程 线程,在Android中是非常重要的,主线程处理UI界面,子线程处理耗时操作。如果在主线程...

  • Android 多线程(一)

    简介 1. 线程分类 主线程(UI线程) : 处理和界面相关的事情. 子线程 : 处理耗时操作. Android中...

网友评论

      本文标题:Android一个界面多个耗时操作

      本文链接:https://www.haomeiwen.com/subject/lbtlsxtx.html