Android編程四大組件之Activity用法實(shí)例分析
本文實(shí)例講述了Android編程四大組件之Activity用法。分享給大家供大家參考,具體如下:
這里詳細(xì)介紹如何創(chuàng)建Activity、生命周期、內(nèi)存管理、啟動(dòng)模式。
創(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);
//第三種方式 :包名類名形式,可啟動(dòng)其他程序中的Activity
Intent intent3 =new Intent();
intent3.setClassName("cn.test.taskdownloader","cn.test.taskdownloader.MainActivity");
startActivity(intent3);
二.創(chuàng)建Activity并傳遞數(shù)據(jù)
1.在意圖對(duì)象中封裝了一個(gè)Bundle對(duì)象,可以用來(lái)攜帶數(shù)據(jù)
2.在新Activity中可以獲得意圖對(duì)象以獲取其中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獲取返回?cái)?shù)據(jù)
1. 使用startActivityForResult(Intent intent, int requestCode) 方法打開(kāi)Activity
2. 重寫(xiě)onActivityResult(int requestCode, int resultCode, Intent data) 方法
3 .新Activity中調(diào)用setResult(int resultCode, Intent data) 設(shè)置返回?cái)?shù)據(jù)之后,關(guān)閉Activity就會(huì)調(diào)用onActivityResult方法
請(qǐng)求的activity:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 創(chuàng)建Activity獲取返回?cái)?shù)據(jù)
* @param view
*/
public void createNew(View view){
Intent intent1 =new Intent(this,NewActivity.class);
intent1.putExtra("data","請(qǐng)求數(shù)據(jù)");
//打開(kāi)Activity等待返回
startActivityForResult(intent1,100);
}
/**
* 重寫(xiě)onActivityResult,關(guān)閉Activity就會(huì)調(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è)置返回?cái)?shù)據(jù)
Intent data =new Intent();
data.putExtra("result","返回的數(shù)據(jù)");
setResult(200,data);
}
}
四.隱式意圖創(chuàng)建Activity
1.顯式意圖是指在創(chuàng)建意圖時(shí)指定了組件,而隱式意圖則不指定組件,通過(guò)動(dòng)作、類型、數(shù)據(jù)匹配對(duì)應(yīng)的組件
2.在清單文件中定義<activity>時(shí)需要定義<intent-filter>才能被隱式意圖啟動(dòng)
3. <intent-filter>中至少配置一個(gè)<action>和一個(gè)<category>,否則無(wú)法被啟動(dòng)
4.Intent對(duì)象中設(shè)置的action、category、data在<intent-filter>必須全部包含才能啟動(dòng)
5.<intent-filter>中的<action>、<category>、<data>都可以配置多個(gè),Intent對(duì)象中不用全部匹配,每樣匹配一個(gè)即可啟動(dòng)
6.如果一個(gè)意圖可以匹配多個(gè)Activity,Android系統(tǒng)會(huì)提示選擇
生命周期
一.Acitivity三種狀態(tài)
運(yùn)行:activity在最前端運(yùn)行
暫停:activity可見(jiàn),但前端還有其他acti vity,被覆蓋一部分,或者前端activity透明
停止:activity不可見(jiàn),完全被覆蓋
二.生命周期相關(guān)方法
onCreate:創(chuàng)建時(shí)調(diào)用,或者程序在暫停、停止?fàn)顟B(tài)下被殺死之后重新打開(kāi)時(shí)也會(huì)調(diào)用
onStart:onCreate之后或者從停止?fàn)顟B(tài)恢復(fù)時(shí)調(diào)用
onResume:onStart之后或者從暫停狀態(tài)恢復(fù)時(shí)調(diào)用,從停止?fàn)顟B(tài)恢復(fù)時(shí)由于調(diào)用onStart,也會(huì)調(diào)用onResume
onPause:進(jìn)入暫停、停止?fàn)顟B(tài),或者銷毀時(shí)會(huì)調(diào)用
onStop:進(jìn)入停止?fàn)顟B(tài),或者銷毀時(shí)會(huì)調(diào)用
onDestroy:銷毀時(shí)調(diào)用
onRestart:從停止?fàn)顟B(tài)恢復(fù)時(shí)調(diào)用
如圖所示:

三.保存信息相關(guān)方法
onSaveInstanceState:在Activity被動(dòng)的摧毀或停止的時(shí)候調(diào)用,用于保存運(yùn)行數(shù)據(jù),可以將數(shù)據(jù)存在在Bundle中
onRestoreInstanceState:該方法在Activity被重新繪制的時(shí)候調(diào)用,例如改變屏幕方向,savedInstanceState為onSaveInstanceState保存的數(shù)據(jù)
內(nèi)存管理
Android系統(tǒng)在運(yùn)行多個(gè)進(jìn)程時(shí),如果系統(tǒng)資源不足,會(huì)強(qiáng)制結(jié)束一些進(jìn)程。優(yōu)先選擇哪個(gè)進(jìn)程來(lái)結(jié)束是有優(yōu)先級(jí)的。以下順序靠上的優(yōu)先結(jié)束
空:進(jìn)程中所有Activity都已銷毀
后臺(tái):進(jìn)程中有一個(gè)停止?fàn)顟B(tài)的Activity
服務(wù):進(jìn)程中一個(gè)運(yùn)行中的Service
可見(jiàn):進(jìn)程中有一個(gè)暫停狀態(tài)的Activity
前臺(tái):進(jìn)程中正在運(yùn)行一個(gè)Activity
啟動(dòng)模式
1.在AndroidManifest.xml中的<activity>標(biāo)簽中可以配置android:launchMode屬性,用來(lái)控制Actvity的啟動(dòng)模式
2.在Android系統(tǒng)中我們創(chuàng)建的Acitivity是以棧的形式呈現(xiàn)的
standard:每次調(diào)用startActivity()啟動(dòng)時(shí)都會(huì)創(chuàng)建一個(gè)新的Activity放在棧頂
singleTop:如果啟動(dòng)的Activity時(shí),指定Activity不在棧頂就創(chuàng)建,如在棧頂,則不再創(chuàng)建
singleTask:如果啟動(dòng)的Activity不存在就創(chuàng)建,如果存在直接跳轉(zhuǎn)到指定的Activity所在位置
singleInstance:如果啟動(dòng)的Activity不存在就創(chuàng)建,如果存在就將指定的Activity移動(dòng)到棧頂
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android開(kāi)發(fā)之媒體播放工具類完整示例
這篇文章主要介紹了Android開(kāi)發(fā)之媒體播放工具類,結(jié)合完整實(shí)例形式分析了基于MediaPlayer的事件監(jiān)聽(tīng)與多媒體文件播放相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Android 如何實(shí)現(xiàn)動(dòng)態(tài)申請(qǐng)權(quán)限
這篇文章主要介紹了Android 如何實(shí)現(xiàn)動(dòng)態(tài)申請(qǐng)權(quán)限。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
android中view手勢(shì)滑動(dòng)沖突的解決方法
本篇文章主要介紹了android中view手勢(shì)滑動(dòng)沖突的解決方法,主要解決方法有兩種,外部和內(nèi)部攔截。有需要的可以參考下。2016-11-11
Android編程實(shí)現(xiàn)自定義進(jìn)度條顏色的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義進(jìn)度條顏色的方法,涉及Android進(jìn)度條的樣式布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android編程設(shè)計(jì)模式之原型模式實(shí)例詳解
這篇文章主要介紹了Android編程設(shè)計(jì)模式之原型模式,結(jié)合實(shí)例形式詳細(xì)分析了Android設(shè)計(jì)模式之原型模式的概念、原理、定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-12-12
基于RxJava實(shí)現(xiàn)酷炫啟動(dòng)頁(yè)
本文介紹怎樣利用RxJava來(lái)實(shí)現(xiàn)Android的啟動(dòng)頁(yè),啟動(dòng)頁(yè)的效果非???,有需要的朋友們可以參考。2016-07-07
android開(kāi)發(fā)之方形圓角listview代碼分享
我寫(xiě)這篇文章受到了kiritor的專欄發(fā)表的博文Android UI控件之ListView實(shí)現(xiàn)圓角效果的啟發(fā)。2013-06-06
Android 用SQLite實(shí)現(xiàn)事務(wù)的方法
本篇文章小編為大家介紹,Android用SQLite實(shí)現(xiàn)事務(wù)的方法。需要的朋友參考下2013-04-04
Android獲取assets文件夾中的數(shù)據(jù)并寫(xiě)入SD卡示例
這篇文章主要介紹了Android獲取assets文件夾中的數(shù)據(jù)并寫(xiě)入SD卡示例,對(duì)初學(xué)Android開(kāi)發(fā)的朋友來(lái)說(shuō)是一個(gè)很實(shí)用的功能,需要的朋友可以參考下2014-07-07
android Web跳轉(zhuǎn)到app指定頁(yè)面并傳遞參數(shù)實(shí)例
這篇文章主要介紹了android Web跳轉(zhuǎn)到app指定頁(yè)面并傳遞參數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

