安卓学习 之 Activity(二)
1.活動是什么
包含用戶界面的組件,主要用于和用戶進行交互。
2. 活動的基本用法
(1)android:id 元素當前唯一的標識符l android:width 元素寬度 android:height 元素高度。
(2)setContentView()方法給當前活動加載一個布局,必須要在AndroidManifest.xml中注冊,但AS已經幫我們動態注冊。
(3)Toast方法,較為簡單。Toast.maketext().show()。
(4)在活動中使用Menu
(5)銷毀一個活動:Back鍵或finish方法。
3.使用Intent
(1)使用顯式Intent
Intent是Android程序中各組件之間的一種交互方式。用于啟動活動、服務以及發送廣播。 Intent intent = new Intent(MainActivity.this,SecondActivity.clalss); startAcitvity(intent);(2)使用隱式Intent
3.更多隱式Intent的用法,比如調用瀏覽器,也可以用來打電話。
Intent intent =new Intent(Intent.ACTION_VIEW); //指定Action為ACTION_VIEW Intent.setData(Uri.parse(“http://www.baidu.com”));(3)發送接受數據
1.傳遞數據:
intent.putExtra(“extra_data”,data);第一個參數為鍵,第二個參數才是真正要傳遞的數據。
2.在另一個Activity中接收數據。
Intent intent = getIntent(); String data=intent.getStringExtra(“extra_data”);3.返回數據給上一個活動
FirstActivity中,啟動SecondActivity中增加
startActivityForResult(intent,1);
//1為請求碼
SecondActivity中增加
setResult(RESULT_OK,intent);
//專門向上一個活動FirstActivity中來返回處理結果。
在 SecondActivity 被銷毀之后會回調上一個活FirstActivity動的 onActivityResult()方法,因此我們需要在 FirstActivity 中重寫這個方法來得到返回的數據
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData);}break; default:} }4. 活動的Th存期
這個方法你已經看到過很多次了,每個活動中我們都重寫了這個方法,它會在活動 第一次被創建的時候調用。你應該在這個方法中完成活動的初始化操作,比如說加載布 局、綁定事件等。
這個方法在活動由不可見變為可見的時候調用。
這個方法在活動準備好和用戶進行交互的時候調用。此時的活動一定位于返回棧的 棧頂,并且處于運行狀態。
這個方法在系統準備去啟動或者恢復另一個活動的時候調用。我們通常會在這個方法中將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。
這個方法在活動完全不可見的時候調用。它和 onPause()方法的主要區別在于,如果啟動的新活動是一個對話框式的活動,那么 onPause()方法會得到執行,而 onStop() 方法并不會執行。
這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態。
7.onRestart()
這個方法在活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。以上七個方法中除了 onRestart()方法,其他都是兩兩相對的,從而又可以將活動分為三種生存期。
5. 活動啟動方式
通過在AndroidMAnifest.xml中標簽中指定android:launchMode來確定啟動方式。
1.standard:
系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會創建該活動的一個新的實例。
2.singleTop:
在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直接使用它,不會再創建新的活動實例。
3.singleTask:
每次啟動該活動時系統首先會在返回棧中檢查是否存在該活動的實例,如果發現已經存在則直接使用該實例,并把在這個活動之上的所有活動統統出棧,如果沒有發現就會創建一個新的活動實例。
4.singleInstance
在這種模式下會有一個單獨的返回棧來管理這個活動,不管是哪個應用程序來訪問這個活動,都共用的同一個返回棧,也就解決了共享活動實 例的問題。
6. 活動最佳實例
1.知曉在當前哪一個活動
新建一個 BaseActivity 繼承自
Activity,然后在 BaseActivity 中重寫 onCreate()方法
讓 BaseActivity 成為 項目中所有活動的父類。現在每當我們進入到一個活動的界面,該活動的類名就會被打印出來,這樣我們就可以 時時刻刻知曉當前界面對應的是哪一個活動了。
2.隨時隨地推出程序
解決連按n次 Back 鍵才退出所有activity。按 Home 鍵只是把程序掛起,并沒有退出程序的問題。
新建一個 ActivityCollector:
public class ActivityCollector {public static List<Activity> activities = new ArrayList<Activity>(); 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();} }在 BaseActivity 的 onCreate()方法中調用了 ActivityCollector 的 addActivity()方法,表明將當前正在創建的活動添加到活動管理器里。然后在 BaseActivity 中重寫 onDestroy()方法, 并調用了 ActivityCollector 的 removeActivity()方法,表明將一個馬上要銷毀的活動從活動管理器里移除。
public class BaseActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); ActivityCollector.addActivity(this);}@Overrideprotected void onDestroy() { super.onDestroy(); ActivityCollector.removeActivity(this);} }然后只需要繼承BaseActivity并調用 ActivityCollector.finishAll()方法就可以了。
3.啟動活動的最佳寫法
解決不同活動由不同的人編寫的問題,這是你有兩種方法:一個是你自己去閱讀 SecondActivity 中的代碼,二是詢問負責編寫 SecondActivity 的同事。
public class SecondActivity extends 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);} }SecondActivity 所需要的數據全部都在方法參數中體現出來了,這樣即使不用閱讀 SecondActivity 中的代碼,或者詢問負責編寫 SecondActivity 的同事,你也可以非常清晰地知道啟動 SecondActivity 需要傳遞哪些數據。
button1.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); } });總結
以上是生活随笔為你收集整理的安卓学习 之 Activity(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓学习 之 概述(一)
- 下一篇: 安卓学习 之 UI控件(三)