知曉當前是在哪一個活動
找到 項目名稱——>app——>src——>main——>java——>包,右鍵new——>java class。我們命名為BaseActivity。內(nèi)容如下:
public class BaseActivityextends AppCompatActivity {
@Override
? ? protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
? ? ? ? Log.d("BaseActivity",getClass().getSimpleName());
? ? }
@Override
? ? protected void onDestroy(){
super.onDestroy();
? ? ? ? ActivityCollector.removeActivity(this);
? ? }
}
隨時隨地退出程序
創(chuàng)建和上面一樣的方法。名字命名為ActivityCollector,內(nèi)容如下:
public class ActivityCollector {
public static Listactivities=new ArrayList<>();
? ? public static void addActivity(Activity activity){
activities.add(activity);
? ? }
public static void removeActivity(Activity activity){
activities.remove(activity);
? ? }
public static void finishAll(){
for(Activity activity:activities){
if(!activity.isFinishing()){
activity.finish();
? ? ? ? ? ? }
}
activities.clear();
? ? }
}
把下面的代碼添加到你要實現(xiàn)退出程序功能的活動中,例如我們在第三個活動添加該功能,代碼如下:
public class ThirdActivityextends AppCompatActivity {
@Override
? ? protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_third);
? ? ? ? Button but_3=(Button)findViewById(R.id.but_3);
? ? ? ? //退出程序
? ? ? ? but_3.setOnClickListener(new View.OnClickListener() {
@Override
? ? ? ? ? ? public void onClick(View v) {
????????????????ActivityCollector.finishAll();
? ??????????????//殺死當前進程
????????????????//android.os.Process.killProcess(android.os.Process.myPid());
? ? ? ? ? ? }
????????});
? ? }
你可以選擇在銷毀所有活動的代碼后面再加上殺掉當前進程的代碼,以保證程序完全退出,殺掉進程的代碼在代碼前加了注釋的。
啟動活動的最佳寫法
前面見過用Intent進行跳轉(zhuǎn),這樣沒問題。但是在真正的項目開發(fā)中經(jīng)常會有對接的問題出現(xiàn)。這時我們換一種寫法,就可以解決這種窘境。
例如我們修改SecondActivity中的代碼,如下所示:
public class SecondActivityextends BaseActivity {
????//啟動活動(最佳方法)
? ? public static void actionStart(Context context,String data1,String data2){
????????Intent intent=new Intent(context,SecondActivity.class);
? ? ? ? intent.putExtra("param1",data1);
? ? ? ? intent.putExtra("param2",data2);
? ? ? ? context.startActivity(intent);
? ? }
//其他的方法用點表示
。。。
}
現(xiàn)在我們只需要在FirstActivity中的onClick() 方法里添加SecondActivity.actionStart(FirstActivity.this,"data1","data1");這樣一目了然,你可以清晰地知道啟動SecondActivity需要傳遞哪些數(shù)據(jù)。