在很多異步操作中,等結果返回后,需要刷新UI。而我們知道UI刷新必須是在主線程中完成。雖然方法很多,但我這里只講其中一種。
在BaseApplication中記錄主線程id
package com.songheng.eastfirst; import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.Intent; import android.os.Handler; import com.songheng.eastfirst.business.applog.manager.AppLogManager; import com.songheng.eastfirst.service.StatisticalService; import com.songheng.eastfirst.utils.UIUtils; public class BaseApplication { private static Context mContext;// Context對象 private static Handler mHandler;// Handler對象 private static Thread mMainThread;// Thread對象 private static int mMainThreadId;// 主線程Id public static Application getApplication() { return application; } public static void setApplication(Application app) { application = app; } static Application application; public static Context getContext() { return mContext; } public static void setContext(Context context) { mContext = context; } public static Handler getHandler() { return mHandler; } public static void setHandler(Handler mHandler) { BaseApplication.mHandler = mHandler; } public static Thread getMainThread() { return mMainThread; } public static void setMainThread(Thread mMainThread) { BaseApplication.mMainThread = mMainThread; } public static int getMainThreadId() { return mMainThreadId; } public static void setMainThreadId(int mMainThreadId) { BaseApplication.mMainThreadId = mMainThreadId; } }
Uitils工具類
public class UIUtils { public static int getMainThreadId() { return BaseApplication.getMainThreadId(); } public static Handler getHandler() { return BaseApplication.getHandler(); } // 判斷是否是主線的方法 public static boolean isRunInMainThread() { return getMainThreadId() == android.os.Process.myTid(); } // 保證當前的UI操作在主線程里面運行 public static void runInMainThread(Runnable runnable) { if (isRunInMainThread()) { // 如果現在就是在珠現場中,就直接運行run方法 runnable.run(); } else { // 否則將其傳到主線程中運行 getHandler().post(runnable); } } }