(Android第一行程式碼實驗一)活動的最佳實踐
阿新 • • 發佈:2018-11-16
活動的最佳實踐
1.知曉當前是在哪一個活動
這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。
- 首先需要新建一個 BaseActivity 繼承自 Activity,然後在 BaseActivity中重寫 onCreate()方法。
-
public class BaseActivity extends Activity { @Override protected
接下來我們需要讓 BaseActivity 成為 ActivityTest 專案中所有活動的父類修改 FirstActivity、SecondActivity和 ThirdActivity的繼承結構,讓它們不再繼承自 Activity,而是 繼承自 BaseActivity。現在重新執行程式,然後通過點選按鈕分別進入到 FirstActivity、SecondActivity 和 ThirdActivity的介面,這時該活動的類名就會被打印出來,
-
2.隨時隨地退出程式
-
你會發現當前想退出程式是非常不方便 的,需要連按三次 Back 鍵才行,該方法可以解決這個問題。
解決思路:
只需要用一個專門的集合類對所有的活動進行管理就可以了,
- 新建一個 ActivityCollector類作為活動管理器
public class ActivityCollector { //,我們通過一個 List來暫存活動, public static List<Activity> activities = new ArrayList<Activity>(); //然後提供了一個 addActivity()方法用 於向 List 中新增一個活動 public static void addActivity(Activity activity) { activities.add(activity); } //提供了一個 removeActivity()方法用於從 List 中移除活動。 public static void removeActivity(Activity activity) { activities.remove(activity); } //最後 提供了一個 finishAll()方法用於將 List中儲存的活動全部都銷燬掉。 public static void finishAll() { for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } } }
- 修改 BaseActivity中的程式碼
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); //呼叫了 ActivityCollector 的 addActivity()方法,表明 將當前正在建立的活動新增到活動管理器裡 ActivityCollector.addActivity(this); } @Override //重寫 onDestroy()方法, 並呼叫了 ActivityCollector 的 removeActivity()方法,表明將一個馬上要銷燬的活動從活動管 理器裡移除。 protected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this); } }
從此以後,不管你想在什麼地方退出程式,只需要呼叫 ActivityCollector.finishAll()方法 就可以了.
Button button3 = (Button) findViewById(R.id.button_3); button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //呼叫 ActivityCollector.finishAll()方法 ActivityCollector.finishAll(); } });
3.啟動活動的最佳寫法
- 啟動 SecondActivity傳遞字串引數最佳寫法。
public class SecondActivity extends BaseActivity { /*所有 SecondActivity中需要的資料都是通過 actionStart()方法的引數傳遞過來的,然 後把它們儲存到 Intent中,最後呼叫 startActivity()方法啟動 SecondActivity。*/ 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); } …… }
這樣寫是一目瞭然,SecondActivity 所需要的資料全 部都在方法引數中體現出來了.
- 現在只需要一行程式碼就可以啟動 SecondActivity
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //傳入引數 SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); } });
- 現在只需要一行程式碼就可以啟動 SecondActivity
- 啟動 SecondActivity傳遞字串引數最佳寫法。
- 修改 BaseActivity中的程式碼
- 新建一個 ActivityCollector類作為活動管理器