如何判斷Activity是否在運(yùn)行刷后?

方法一.

看看Google工程師是怎么判斷的(來源于Android源碼中的Call應(yīng)用嗓蘑,AsyncTask中的onPostExecute片段):

@Override
protected void onPostExecute(Void result) {
    final Activity activity = progressDialog.getOwnerActivity();

    if (activity == null || activity.isDestroyed() || activity.isFinishing()) {
        return;
    }

    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
}

多了一個(gè)isDestroyed()的判斷

方法二.定義ActivityCollector

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;

/**
 * Author: jack
 * Description:管理所有的棧中的Activity
 */
public class ActivityCollector {

    /**
     * 存放activity的列表
     */
    public static HashMap<Class<?>, Activity> activities = new LinkedHashMap<>();

    /**
     * 添加Activity
     *
     * @param activity
     */
    public static void addActivity(Activity activity, Class<?> clz) {
        activities.put(clz, activity);
    }

    /**
     * 判斷一個(gè)Activity 是否存在
     *
     * @param clz
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public static <T extends Activity> boolean isActivityExist(Class<T> clz) {
        boolean res;
        Activity activity = getActivity(clz);
        if (activity == null) {
            res = false;
        } else {
            if (activity.isFinishing() || activity.isDestroyed()) {
                res = false;
            } else {
                res = true;
            }
        }

        return res;
    }

    /**
     * 獲得指定activity實(shí)例
     *
     * @param clazz Activity 的類對(duì)象
     * @return
     */
    public static <T extends Activity> T getActivity(Class<T> clazz) {
        return (T) activities.get(clazz);
    }

    /**
     * 移除activity,代替finish
     *
     * @param activity
     */
    public static void removeActivity(Activity activity) {
        if (activities.containsValue(activity)) {
            activities.remove(activity.getClass());
        }
    }

    /**
     * 移除所有的Activity
     */
    public static void removeAllActivity() {
        if (activities != null && activities.size() > 0) {
            Set<Entry<Class<?>, Activity>> sets = activities.entrySet();
            for (Entry<Class<?>, Activity> s : sets) {
                if (!s.getValue().isFinishing()) {
                    s.getValue().finish();
                }
            }
        }
        activities.clear();
    }
}

在 App中的BaseActivity中

public  class BaseActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this, getClass());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}

然后所有的Activity都去繼承 BaseActvity 就可以使 ActivityCollector起作用了贤姆。

好處

  1. 在應(yīng)用的任何地方都可以去獲取到 Activity實(shí)例,從而操作指定的 View對(duì)象
MainActivity mainActivity = ActivityCollector.getActivity(MainActivity.class);
if (mainActivity!=null) mainActivity.main_radio.check(R.id.radio_button1);
  1. 判斷一個(gè) Activity是否存在
ActivityCollector.isActivityExist(MainActivity.class); 

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末档冬,一起剝皮案震驚了整個(gè)濱河市膘茎,隨后出現(xiàn)的幾起案子桃纯,更是在濱河造成了極大的恐慌,老刑警劉巖披坏,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态坦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棒拂,警方通過查閱死者的電腦和手機(jī)伞梯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帚屉,“玉大人谜诫,你說我怎么就攤上這事」サ” “怎么了喻旷?”我有些...
    開封第一講書人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牢屋。 經(jīng)常有香客問我且预,道長,這世上最難降的妖魔是什么烙无? 我笑而不...
    開封第一講書人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任锋谐,我火速辦了婚禮,結(jié)果婚禮上截酷,老公的妹妹穿的比我還像新娘涮拗。我一直安慰自己,他們只是感情好迂苛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開白布三热。 她就那樣靜靜地躺著,像睡著了一般三幻。 火紅的嫁衣襯著肌膚如雪康铭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,919評(píng)論 1 290
  • 那天赌髓,我揣著相機(jī)與錄音从藤,去河邊找鬼。 笑死锁蠕,一個(gè)胖子當(dāng)著我的面吹牛夷野,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荣倾,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼悯搔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了舌仍?” 一聲冷哼從身側(cè)響起妒貌,我...
    開封第一講書人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤通危,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灌曙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菊碟,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年在刺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逆害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚣驼,死狀恐怖魄幕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颖杏,我是刑警寧澤纯陨,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站留储,受9級(jí)特大地震影響队丝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欲鹏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臭墨。 院中可真熱鬧赔嚎,春花似錦、人聲如沸胧弛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽结缚。三九已至损晤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間红竭,已是汗流浹背尤勋。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茵宪,地道東北人最冰。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像稀火,于是被迫代替她去往敵國和親暖哨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容