Android一个界面多个耗时操作

2017-09-13  本文已影响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);
    }
上一篇 下一篇

猜你喜欢

热点阅读