- activity之intent
- activity的跳轉(zhuǎn)通過(guò)intent,分顯式意圖和隱式意圖
- 顯式意圖:直接傳入要跳轉(zhuǎn)的activity吕粹,和上下文,通過(guò)startActivity(intent)
- 隱式意圖:要指明action和category岗仑,然后在清單文件中activity·標(biāo)簽中配置<intent-filter>匹耕,一般要兩者都匹配上,才能啟動(dòng)該activity荠雕,<intent-filter>如果配置的category·是默認(rèn)的趁矾,則不需要指明category
- 每個(gè)intent只能指明一個(gè)action唉堪,可以有多個(gè)category
- 隱式intent不但能啟動(dòng)自己程序里的活動(dòng)痰驱,還能啟動(dòng)其他程序里的活動(dòng)录豺,如啟動(dòng)系統(tǒng)的瀏覽器
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http:www.baidu.com"));
startActivity(intent);
- setData(Uri uri):指明操作的數(shù)據(jù),<intent-filter>中也要配置<data>盖文,才能用隱式意圖啟動(dòng)
- 調(diào)用系統(tǒng)撥號(hào)界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
- intent攜帶數(shù)據(jù):putExtra(key,value),獲取數(shù)據(jù):如string類(lèi)型的,getIntent().getStringExtra()
- intent返回?cái)?shù)據(jù):startActivityForResult(int requestCode,Intent intent),在被開(kāi)啟的activity中返回?cái)?shù)據(jù)時(shí)嘱蛋,調(diào)用setResult(“RESULT_OK”,intent)返回?cái)?shù)據(jù),重寫(xiě)onActivityResult()取得數(shù)據(jù)
- 重寫(xiě)返回鍵:onBackPressed()
- 活動(dòng)的四種狀態(tài):處于棧頂,不處于棧頂?shù)匀豢梢?jiàn)洒敏,不可見(jiàn)龄恋,銷(xiāo)毀狀態(tài)
- 活動(dòng)的生命周期:
- onCreate():加載布局,綁定布局
- onStart():不可見(jiàn)到可見(jiàn)
- onResume():可見(jiàn)凶伙,并獲取焦點(diǎn)
- onPause():失去焦點(diǎn)
- onStop():不可見(jiàn)
- onDestroy():被銷(xiāo)毀
- onRestart():由不可見(jiàn)到可見(jiàn)
- 活動(dòng)被系統(tǒng)回收:當(dāng)activityA啟動(dòng)到ActivityB,ActivityA不可見(jiàn)郭毕,有可能被系統(tǒng)回收,這時(shí)函荣,按返回鍵铣卡,activityA還是能看到,但是已經(jīng)被重新創(chuàng)建了偏竟,而不是走的onRestart(),如何解決呢?通過(guò)重寫(xiě)onSaveInstanceState()保存數(shù)據(jù)
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "hello";
outState.putString("save_data",tempData);
}
如何在activity重新創(chuàng)建的時(shí)候取出數(shù)據(jù)呢敞峭?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null){
String data = savedInstanceState.getString("save_data");
}
}
- 獲取當(dāng)前任務(wù)棧的id:getTaskId()
- 殺死當(dāng)前應(yīng)用: android.os.Process.killProcess(android.os.Process.myPid());
能不能來(lái)一點(diǎn)有趣的知識(shí)
1.activity的跳轉(zhuǎn)動(dòng)畫(huà)
通過(guò)overridePendingTransition()方法
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.screen_zoom_in, R.anim.screen_zoom_out);
finish();