欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 關閉多個Activity的實現(xiàn)方法

 更新時間:2017年09月26日 08:57:18   作者:CharlinGod  
這篇文章主要介紹了Android 關閉多個Activity的實現(xiàn)方法的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下

Android 關閉多個Activity的實現(xiàn)方法

總的來說有四種方法:

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);就可以實現(xiàn)。

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

在基類構造方法中實現(xiàn)注冊廣播,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是相同的,每次都會創(chuàng)建一個新的Activity實例,區(qū)別是singleTop當壓入棧的Activity與任務棧的棧頂Activit相同則不會創(chuàng)建實例(會調用onNewIntent方法)

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

當然這里并沒有用到這四種模式而是運用的是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); 
} 

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

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

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

就可以了,現(xiàn)在來說一下這幾個什么意思

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

 

如有疑問請留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

最新評論