android 四大組件之activity(活動)

四大組件之一,是用戶唯一可以看到的東西,主要用來跟用戶進行交互,通過setContextView(view);來顯示布局。


生命周期

當第一次調用一個Activity就會執行onCreate方法

當Activity處于可見狀態的時候就會調用onStart方法

當Activity可以得到用戶焦點的時候就會調用onResume方法

當Activity沒有被銷毀的時候重新調用這個Activity就會調用onRestart方法

當Activity被遮擋住的時候就會調用onPause方法

當Activity處于不可見狀態的時候就會調用onStop方法

當Activity被銷毀時會調用onDestory方法


activity轉到下一個活動 ?通過意圖 ?Intent?

Intent intent=new Intent(mainactivity.this,目標activity.class);

startActivity(intent)

一個新的activity 需要在Androidmanifest中注冊 ?有兩種注冊方式 ? 一種顯示一種隱式

顯示:《application》中<activity android:name=".新activity"></activity>


隱式:如果是隱式的話那么就不能用上面拿個Intent 的方法了我們需要換一個

Intent intent=new Intent(); ? ? intent.setAction("你自己起名字")?

startActivity(intent)

<activity android:name=".新activity">

<intent-filter>

<action android:name="你自己起名字"> //這個名字最好起的規范點

<category android:name="android.intent.category.DEFAULT">

</intent-filter>

</activity>


在這里通過隱式Intent可以啟動很多其他程序的應用 ? 如

<category android:name="android.intent.action.DIAL">表示打電話的意圖,系統會找到能處理這個意圖的Activity,例如調出撥號面板。

Intent intent =new Intent(Intent.ACTION_DIAL);

//?或者Intent?intent?=?new?Intent("android.intent.action.DIAL");

//?Intent.ACTION_DIAL是內置常量,值為"android.intent.action.DIAL"

startActivity(intent);

可以通過finish()推出activity 但是并沒有銷毀activity ?只是將活動推向后臺,并沒有立即釋放內存,活動的資源并沒有被清理;當調用System.exit(0)時,殺死了整個進程,這時候活動所占的資源也會被釋放。


向下一個activity 傳遞數據

Intent intent=new Intent(xxxx.this,xxx.class);

intent.putExtra("key",value);

startActivity(intent);

獲取數據

Intent intent=getIntent();

intent.getStringExtra("key");

向上一個活動返回數據

Intent i=new Intent(xxx.this,xxx.class);

StartActivityForResult(i,1);//通過這個方法來啟動 ?傳入一個數值

在下一個服務器中 ? 返回事件中寫 ?

Intent int=new Intent();//構建Intent,但是只是用來傳遞數據,沒有任何意圖

intent.putextra("key",value);

setResult(RESUTL_OK,Intent); ?finish(): ?//把數值返回去

在上一個活動中重寫onActivityResult();

方法中 ? switch(requestCode){

case 1:

if(resultCode==RESULT_OK){

String returnedDate=data.getStringExtra("key");

}break;

}


當活動進入停止狀態也就是 ?onStop()那么它有可能被系統回收,有時候我們在活動中有一些臨時數據需要如果活動被回收了那么數據也就不再存在,所以,在活動中有一個onSaveInstanceState()方法,它會在活動被銷毀前執行,返回一個bundle 所以我們可以用這個bundle來存儲臨時數據。

有時候我們會有這樣的需求,看書時回到上一次退出程序的頁面,這個需求我們也可以通過onSaveInstanceState()實現,只不過不是存在bundle中,而是將他存在文件,或者數據庫中,在每次啟動程序的適合,恢復上次退出的樣子

活動的4種啟動模式

第一種就是我們最常用的Standard他是活動的默認啟動方式,在不指定顯示的情況下都是用這種,這種模式下,每次通過Intent啟動一個活動時都會啟動一個活動。

第二種SingleTop,在Standard默認的啟動模式下,如果活動在棧定了再次啟動是還會創建一個新的活動,SingleTop則不同,如果活動在棧定了,你在去創建這個活動,他不會再去創建不執行onCreate方法

第三種singleTask,在SingleTop啟動模式下,如果活動不在棧頂,那么還是可以創建活動,那么在singleTask模式下,每次啟動活動時,會在棧中查找,有沒有這個活動,如果有這個活動,那么就直接使用這個活動實例,這個時候不會在調用onCreate方法,并且將這個活動之上的活動全部踢出棧,如果沒有發現,那么就創建一個新的活動,這個時候,只要按一下back鍵就可以推出程序了

第四種singlelnstance,這種啟動模式死最復雜的一種了,使用這種模式會啟動一個新的棧開管理這個活動,這樣子有什么意義呢?這種模式一般是用來給其它程序訪問此活動

修改模式需要在AndroidManifest中 ?<activity>android:launchMode="xxxx"指定啟動模式

活動實踐技巧

知道自己在哪個activity下面 ,創建一個TextActivity繼承Activity 重寫onCreate()打印Log.d("XXX",getClass.getSimpleName()); ?然后把將需要知道的activity繼承TextActivity();所以當每次執行時候就會調用Log.d();就能知道在哪個Activity

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容