Android編程四大組件之Activity用法實(shí)例分析
本文實(shí)例講述了Android編程四大組件之Activity用法。分享給大家供大家參考,具體如下:
這里詳細(xì)介紹如何創(chuàng)建Activity、生命周期、內(nèi)存管理、啟動模式。
創(chuàng)建Activity
一.定義Activity
1. 定義Activity 定義類繼承Activity
2.在AndroidManifest.xml的節(jié)點(diǎn)中聲明<activity>
顯式意圖創(chuàng)建Activity三種方式方式
//第一種方式:構(gòu)造函數(shù),代碼少 Intent intent1 =new Intent(this,NewActivity.class); startActivity(intent1); //第二種方式:類名形式,靈活,可擴(kuò)展性強(qiáng) Intent intent2 =new Intent(); intent2.setClassName(this,"cn.test.activity.NewActivity"); startActivity(intent2); //第三種方式 :包名類名形式,可啟動其他程序中的Activity Intent intent3 =new Intent(); intent3.setClassName("cn.test.taskdownloader","cn.test.taskdownloader.MainActivity"); startActivity(intent3);
二.創(chuàng)建Activity并傳遞數(shù)據(jù)
1.在意圖對象中封裝了一個Bundle對象,可以用來攜帶數(shù)據(jù)
2.在新Activity中可以獲得意圖對象以獲取其中Bundle保存的數(shù)據(jù)
//傳遞數(shù)據(jù)方式一 Intent intent1 =new Intent(this,NewActivity.class); Bundle bundle=new Bundle(); bundle.putString("data","Test"); intent1.putExtras(bundle); startActivity(intent1); //獲取意圖方式一 Bundle bundle2 =getIntent().getExtras(); Toast.makeText(this,bundle2.getString("data"),0).show(); //傳遞數(shù)據(jù)方式二 Intent intent2 =new Intent(this,NewActivity.class); intent2.putExtra("data","Test2"); startActivity(intent2); //獲取意圖方式二 Toast.makeText(this,getIntent().getStringExtra("data"),0).show();
三.創(chuàng)建Activity獲取返回數(shù)據(jù)
1. 使用startActivityForResult(Intent intent, int requestCode) 方法打開Activity
2. 重寫onActivityResult(int requestCode, int resultCode, Intent data) 方法
3 .新Activity中調(diào)用setResult(int resultCode, Intent data) 設(shè)置返回數(shù)據(jù)之后,關(guān)閉Activity就會調(diào)用onActivityResult方法
請求的activity:
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } /** * 創(chuàng)建Activity獲取返回數(shù)據(jù) * @param view */ public void createNew(View view){ Intent intent1 =new Intent(this,NewActivity.class); intent1.putExtra("data","請求數(shù)據(jù)"); //打開Activity等待返回 startActivityForResult(intent1,100); } /** * 重寫onActivityResult,關(guān)閉Activity就會調(diào)用此方法 */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(this,"requestCode:"+requestCode+",requestCode:"+resultCode+",data"+data.getStringExtra("result"),0).show(); } }
返回的activity:
public class NewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_activity); Toast.makeText(this,getIntent().getStringExtra("data"),0).show(); //設(shè)置返回數(shù)據(jù) Intent data =new Intent(); data.putExtra("result","返回的數(shù)據(jù)"); setResult(200,data); } }
四.隱式意圖創(chuàng)建Activity
1.顯式意圖是指在創(chuàng)建意圖時指定了組件,而隱式意圖則不指定組件,通過動作、類型、數(shù)據(jù)匹配對應(yīng)的組件
2.在清單文件中定義<activity>時需要定義<intent-filter>才能被隱式意圖啟動
3. <intent-filter>中至少配置一個<action>和一個<category>,否則無法被啟動
4.Intent對象中設(shè)置的action、category、data在<intent-filter>必須全部包含才能啟動
5.<intent-filter>中的<action>、<category>、<data>都可以配置多個,Intent對象中不用全部匹配,每樣匹配一個即可啟動
6.如果一個意圖可以匹配多個Activity,Android系統(tǒng)會提示選擇
生命周期
一.Acitivity三種狀態(tài)
運(yùn)行:activity在最前端運(yùn)行
暫停:activity可見,但前端還有其他acti vity,被覆蓋一部分,或者前端activity透明
停止:activity不可見,完全被覆蓋
二.生命周期相關(guān)方法
onCreate:創(chuàng)建時調(diào)用,或者程序在暫停、停止?fàn)顟B(tài)下被殺死之后重新打開時也會調(diào)用
onStart:onCreate之后或者從停止?fàn)顟B(tài)恢復(fù)時調(diào)用
onResume:onStart之后或者從暫停狀態(tài)恢復(fù)時調(diào)用,從停止?fàn)顟B(tài)恢復(fù)時由于調(diào)用onStart,也會調(diào)用onResume
onPause:進(jìn)入暫停、停止?fàn)顟B(tài),或者銷毀時會調(diào)用
onStop:進(jìn)入停止?fàn)顟B(tài),或者銷毀時會調(diào)用
onDestroy:銷毀時調(diào)用
onRestart:從停止?fàn)顟B(tài)恢復(fù)時調(diào)用
如圖所示:
三.保存信息相關(guān)方法
onSaveInstanceState:在Activity被動的摧毀或停止的時候調(diào)用,用于保存運(yùn)行數(shù)據(jù),可以將數(shù)據(jù)存在在Bundle中
onRestoreInstanceState:該方法在Activity被重新繪制的時候調(diào)用,例如改變屏幕方向,savedInstanceState為onSaveInstanceState保存的數(shù)據(jù)
內(nèi)存管理
Android系統(tǒng)在運(yùn)行多個進(jìn)程時,如果系統(tǒng)資源不足,會強(qiáng)制結(jié)束一些進(jìn)程。優(yōu)先選擇哪個進(jìn)程來結(jié)束是有優(yōu)先級的。以下順序靠上的優(yōu)先結(jié)束
空:進(jìn)程中所有Activity都已銷毀
后臺:進(jìn)程中有一個停止?fàn)顟B(tài)的Activity
服務(wù):進(jìn)程中一個運(yùn)行中的Service
可見:進(jìn)程中有一個暫停狀態(tài)的Activity
前臺:進(jìn)程中正在運(yùn)行一個Activity
啟動模式
1.在AndroidManifest.xml中的<activity>標(biāo)簽中可以配置android:launchMode屬性,用來控制Actvity的啟動模式
2.在Android系統(tǒng)中我們創(chuàng)建的Acitivity是以棧的形式呈現(xiàn)的
standard:每次調(diào)用startActivity()啟動時都會創(chuàng)建一個新的Activity放在棧頂
singleTop:如果啟動的Activity時,指定Activity不在棧頂就創(chuàng)建,如在棧頂,則不再創(chuàng)建
singleTask:如果啟動的Activity不存在就創(chuàng)建,如果存在直接跳轉(zhuǎn)到指定的Activity所在位置
singleInstance:如果啟動的Activity不存在就創(chuàng)建,如果存在就將指定的Activity移動到棧頂
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android開發(fā)之AlarmManager的用法詳解
這篇文章主要介紹了Android開發(fā)之AlarmManager的用法,是Android應(yīng)用開發(fā)中非常實(shí)用的技能,需要的朋友可以參考下2014-07-07Android Manifest中meta-data擴(kuò)展元素數(shù)據(jù)的配置與獲取方式
這篇文章主要介紹了Android Manifest中meta-data擴(kuò)展元素數(shù)據(jù)的配置與獲取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android Studio實(shí)現(xiàn)簡易計算器(表格布局TableLayout)
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)簡易計算器,表格布局TableLayout,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03Android 判斷當(dāng)前語言環(huán)境是否是中文環(huán)境
本文主要介紹了Android 判斷當(dāng)前語言環(huán)境是否是中文環(huán)境的方法。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Android實(shí)現(xiàn)支持所有View的通用的下拉刷新控件
這篇文章主要介紹了Android實(shí)現(xiàn)支持所有View的通用的下拉刷新控件的相關(guān)資料,需要的朋友可以參考下2016-06-06