91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么關閉多個Activity

發布時間:2021-06-26 17:27:08 來源:億速云 閱讀:169 作者:Leah 欄目:移動開發

Android中怎么關閉多個Activity,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1、使用Application來進行關閉

public class App extends Application { 

  private static List<Activity> lists = new ArrayList<>(); 

  public static void addActivity(Activity activity) { 
    lists.add(activity); 
  } 

  public static void clearActivity() { 
    if (lists != null) { 
      for (Activity activity : lists) { 
        activity.finish(); 
      } 

      lists.clear(); 
    } 
  } 
} 

//然后寫一個基類Activity,在構造構造方法調用App.addActivity(this);就可以實現。

2、使用廣播的方式來進行關閉

在基類構造方法中實現注冊廣播,onDestroy方法取消注冊

public class BaseActivity extends AppCompatActivity { 

  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(getString(R.string.promotion_action)); 
    registerReceiver(receiver, intentFilter); 
  } 

  BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
      finish(); 
    } 
  }; 

  @Override 
  protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(receiver); 
  } 
}

接下來只需要你在想要關閉所有Activity的界面調用

//銷毀所有的Activity 
//關閉本窗口
getActivity().finish();

//關閉父窗口
if(getActivity().getParent()!= null){
  getActivity().getParent().finish();
}

//關閉列表頁面
Intent intent = new Intent();
intent.setAction(getString(R.string.promotion_action));
getActivity().sendBroadcast(intent);

3、使用onActivityResult遞歸回調的方式關閉

1)在基類Activity重寫onActivityResult方法通過識別ResultCode來調用finish方法

2)接下來只需要在你想要關閉Activity調用setResult(Result_CLOSE)就可以了

public class BaseActivity extends AppCompatActivity { 
  protected final static int RESULT_CLOSE = 0; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
  } 

  @Override 
  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_CLOSE){ 
      setResult(RESULT_CLOSE); 
      finish(); 
    } 
  } 
}

4.使用setFalgs的方式來關閉

首先先來介紹一個LaunchMode四種模式:

LaunchMode

1)standard和singleTop是相同的,每次都會創建一個新的Activity實例,區別是singleTop當壓入棧的Activity與任務棧的棧頂Activit相同則不會創建實例(會調用onNewIntent方法)

2)singleInstance和singleTask是相同的,都會保證任務中沒有相同的任務,(當執行的Activity與任務中某個Activity相同則會調用onNewIntent方法),不同點是(singleInstance每次都會創建一個任務棧并將Activity壓入棧中),(singleTask是在一個任務棧中,如果壓入棧的Activity與棧內Activity某個相同則直接將那個Activity移動到棧頂不會創建新的實例)

當然這里并沒有用到這四種模式而是運用的是Intent.FLAG_ACTIVITY_CLEAR_TOP,這種標示基本和singleTop類似不同的是如果壓入棧的Activity在棧內某個Activity相同則將它上面的所有Activity進行出棧操作。

在每次跳轉都加上

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

所以在最后一個Activity后退應用:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
  if (keyCode == KeyEvent.KEYCODE_BACK) { 
    //銷毀所有的Activity 
    Intent intent = new Intent(this,FirstActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
  } 
  return super.onKeyDown(keyCode, event); 
}

這樣略先復雜,現在來說一下使用flag的另一種方法:

在退出的Activity的前一個Activity跳轉加上

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);

就可以了,現在來說一下這幾個什么意思

/* 
  FLAG_ACTIVITY_CLEAR_TASK 這個標示將在這個活動開始之前清除該棧中所有的任務,將里面的Activity都finish掉 
  FLAG_ACTIVITY_TASK_ON_HOME 這個flag將造成新任務在home的上面,就是在啟動的Activity點擊back之后就會回到home界面 
 */

關于Android中怎么關閉多個Activity問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民勤县| 新竹县| 无棣县| 县级市| 文水县| 寻甸| 孝感市| 金寨县| 阳高县| 广安市| 商水县| 家居| 莆田市| 射洪县| 天台县| 广丰县| 田林县| 大方县| 伊吾县| 肥乡县| 广河县| 呼图壁县| 于都县| 年辖:市辖区| 双牌县| 衢州市| 辽阳县| 金平| 冕宁县| 洛阳市| 济阳县| 子洲县| 天全县| 元朗区| 淄博市| 宝鸡市| 东乌珠穆沁旗| 凌源市| 赣州市| 岗巴县| 肃宁县|