- activity之intent
- activity的跳轉(zhuǎn)通過intent,分顯式意圖和隱式意圖
- 顯式意圖:直接傳入要跳轉(zhuǎn)的activity,和上下文,通過startActivity(intent)
- 隱式意圖:要指明action和category,然后在清單文件中activity·標簽中配置<intent-filter>,一般要兩者都匹配上,才能啟動該activity,<intent-filter>如果配置的category·是默認的,則不需要指明category
- 每個intent只能指明一個action,可以有多個category
- 隱式intent不但能啟動自己程序里的活動,還能啟動其他程序里的活動,如啟動系統(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>,才能用隱式意圖啟動
- 調(diào)用系統(tǒng)撥號界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
- intent攜帶數(shù)據(jù):putExtra(key,value),獲取數(shù)據(jù):如string類型的,getIntent().getStringExtra()
- intent返回數(shù)據(jù):startActivityForResult(int requestCode,Intent intent),在被開啟的activity中返回數(shù)據(jù)時,調(diào)用setResult(“RESULT_OK”,intent)返回數(shù)據(jù),重寫onActivityResult()取得數(shù)據(jù)
- 重寫返回鍵:onBackPressed()
- 活動的四種狀態(tài):處于棧頂,不處于棧頂?shù)匀豢梢?,不可見,銷毀狀態(tài)
- 活動的生命周期:
- onCreate():加載布局,綁定布局
- onStart():不可見到可見
- onResume():可見,并獲取焦點
- onPause():失去焦點
- onStop():不可見
- onDestroy():被銷毀
- onRestart():由不可見到可見
- 活動被系統(tǒng)回收:當activityA啟動到ActivityB,ActivityA不可見,有可能被系統(tǒng)回收,這時,按返回鍵,activityA還是能看到,但是已經(jīng)被重新創(chuàng)建了,而不是走的onRestart(),如何解決呢?通過重寫onSaveInstanceState()保存數(shù)據(jù)
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "hello";
outState.putString("save_data",tempData);
}
如何在activity重新創(chuàng)建的時候取出數(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");
}
}
- 獲取當前任務棧的id:getTaskId()
- 殺死當前應用: android.os.Process.killProcess(android.os.Process.myPid());
能不能來一點有趣的知識
1.activity的跳轉(zhuǎn)動畫
通過overridePendingTransition()方法
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.screen_zoom_in, R.anim.screen_zoom_out);
finish();