標籤:
寫在前面的話:
1. 最近在自學Android,也是邊看書邊寫一些Demo,由於知識點越來越多,腦子越來越記不清楚,所以打算寫成讀書筆記,供以後查看,也算是把自己學到所理解的東西寫出來,獻醜,如有不對的地方,希望大家給與指正。
2. 由於類似於讀書筆記,可能格式神馬的會比較隨(hen)意(chou),大家看著受不了,可以使勁吐槽。
*************************************我只是分割線***************************************
上一篇已經講了一些關於Project目錄結構的東西,這次記錄一下關於Android四大組件之一的Activity的一些東西,它也是Android中最基本的模組之一。
<一>什麼是Activity?
它叫活動(聽著很彆扭,這麼長時間還是感覺不好接受~),幾乎所有的活動都是用來與使用者互動的,活動主要關注與視圖表單的建立,一個應用程式可以包含零個或者多個活動,但是包含零個活動的應用比較少。【PS:這話是參考別人的,我只是拿來裝X】
其實通俗來說,我們可以把手機當做一個瀏覽器,而Activity就是其中的一個個網頁,在Activity上面,我們可以添加不同的View(就是.NET裡面所說的控制項),並且可以執行一些操作邏輯。
<二>Activity的生命週期
【圖片是借用別人的】,
Activity的“整個生命週期”是發生在第一次調用onCreate(Bundle)和唯一最後調用onDestroy()方法之間。在onCreate(Bundle)方法中完成活動的初始化操作設定全域狀態,比如載入布局、綁定事件等,並在onDestroy()方法釋放資源。
Activity的“顯示生命週期”是發生在調用onStart()方法以及調用相對應的onStop()方法之間。在這之間,可以在手機螢幕上看到這個活動。隨著Activity對使用者的可見和不可見狀態的改變,這兩個方法能被多次調用。
Activity的“前台生命週期”是在onResume()和onPause()方法之間所經曆的,在這個周期內,活動處於運行狀態,此時的活動是可以和使用者進行互動的。
我個人的方法是:建立一個app,然後在Activity的代碼中把這些方法全部重寫出來,為每個方法打上斷點(或者日誌輸出),Debug進行調試,就基本上明白了什麼時候會被調用。
<三>Activity的啟動和Activity之間的資料傳遞
這裡我們需要用到一個對象Intent,Intent是Android程式中各組件之間進行互動的一種重要方式,它一般可被用於啟動活動、啟動服務、以及發送廣播等情境,關於它的用法後面再詳細說。
1. 簡單的啟動新的Activity
使用的方法:startActivity(Intent)
樣本:
Intent _intent = new Intent();_intent.setClass(MainActivity.this, ActivityB.class);startActivity(_intent);
//這個調用方法也可以寫成
Intent _intent2 = new Intent(MainActivity.this,ActivityB.class);
startActivity(_intent2);
執行個體化一個Intent對象,然後指定從當前的MainActivity這個活動,跳轉到ActivityB這個活動。
2. 啟動新的Activity,並有傳回值
使用方法:public void startActivityForResult(Intent intent, int requestCode),注意第二個參數:requesCode,這個參數類似於當初特工接頭時的暗號,
樣本:
1. 應用從活動MainActivity跳轉到ActivityC,並請求一個字串;
2. 在活動Activity中操作,關閉活動ActivityC時,返回請求的字串給MainActivty;
3.活動MainActivity擷取字串。
class ButtonActivitiesClickListener implements OnClickListener { @Override public void onClick(View v) { if (v.getId() == R.id.btnSkipToC) { Intent _intent = new Intent(); _intent.setClass(MainActivity.this, ActivityC.class); startActivityForResult(_intent, 100); } } }
注意,這裡就是啟動新的活動ActivityC,暗號requestCode是100。
在活動ActivityC中,點擊關閉按鈕時用void setResult (int resultCode, Intent data)傳回請求的字串,
class ButtonActivityAListener implements OnClickListener { @Override public void onClick(View v) { if (v.getId() == R.id.btnreturn) { Intent _intent = new Intent(); EditText editText = (EditText) findViewById(R.id.edittext_first); String inputStr = editText.getText().toString(); _intent.putExtra("dashenzaijia", inputStr); setResult(Activity.RESULT_OK, _intent); finish(); } } }
備忘:Intent.putExtra(String name, String value)類似於一個資料字典,這個Intent就是ActivityC返回字串給MainActivity的載體,name就是鍵,finish()方法類似於winform中的Close();
關閉活動ActivityC後,然後再MainActivity中,有一個虛方法,重載一下,然後從這個方法裡面擷取ActivityC的傳回值,如下:
@Override protected void onActivityResult(int arg0, int arg1, Intent arg2) { // TODO Auto-generated method stub super.onActivityResult(arg0, arg1, arg2); if (arg0 == 100 && arg1 == Activity.RESULT_OK) { String returnValue = arg2.getStringExtra("dashenzaijia"); TextView view = (TextView) this.findViewById(R.id.textview_showresult); if (!returnValue.isEmpty()) { view.setText("來自Activity C的值:" + returnValue); } else { view.setText(null); } } }
第一個參數就是當初定義的兩個活動之間的暗號,第二個參數是跳轉後頁面的關閉時的結果,類似於C# 裡面表單關閉時的DialogResult,第三個參數就是傳回值的載體。
關於Activity的最基本的一些知識就說完了。
Android基礎學習第二篇—Activity