1、註冊
在AndroidManifest中 <application> 添加標籤<activity> </activity> </application>
屬性 android:label=" " //標題欄的內容
<intent-filter> 程序的主活動
2、隱藏標題欄
requestWindowFeature(Window.FEATURE_NO_TITLE) ; 寫在 setContentView()方法前
3、Toast 提醒
Toast.makeText(Context, Text ,length).show(); //length-------Toast.LENGTH_SHORT(_LONG) 是代表彈出來顯示的時間長短
4、Menu (自動隱藏)
在res 下新建menu 文件夾(new Folder),新建xml文件
菜單項:<item :id=" " :title=" " />
主類文件下: public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main ,menu); //menu是Menu對象 return true; //可見 }
點擊事件: onOptionsItemSelected(Menu item) { }
5、銷燬一個活動
finish(); //比如按鈕點擊事件
一、活動的生命週期
1、返回棧:Android 使用Task來管理活動 ;一個任務就是一組存放在棧裏的活動的集合 ;當啓動一個新的活動,會入棧,即處於棧頂位置
2、活動狀態 <1> 運行狀態:位於返回棧的棧頂 <2>暫停狀態 :不處於棧頂但仍可見 <3> 停止 :不處於~~,完全不可見,可能會被回收 <4> 從返回棧中移除
3、活動的生存期:
<1>onCreate():初始化操作,第一次創建時執行
<2>onStart():活動由不可見變爲可見時調用
<3>onResume(): 活動準備好和用戶交互時調用,位於棧頂
<4>onPause(): 系統準備去啓動或恢復另一個活動時,方法中將消耗CPU的釋放,保存關鍵數據
<5>onStop(): 活動完全不可見時調用~ 啓動的新活動是對話框活動,該方法不執行,o~P~()會執行
<6>onDestroy():活動被銷燬之前調用,之後銷燬狀態
<7>onRestart(): 活動由停止變爲運行狀態之前調用,重啓動
完整生存期:onStart()、onDestroy()
可見生存期:onStart()、onStop()
前臺生存期:onResume()、nPause()
(對話框可直接在註冊文件中聲明) <activity android:theme="@android:style/Theme.Dialog">
4、恢復活動被回收時的數據丟失
二、活動的啓動模式
1、standard:默認
每當啓動一個新的活動,就會在返回棧中入棧,並處於棧頂,系統不會在乎活動是否已在棧中
eg:點擊自己界面跳到自己,棧中存在3個相同的Activity實例,此時要退出(返回)要點3次back
2、SingleTop
啓動時若發現棧頂已經是該活動則不會創建實例 註冊文件:<activity android:launchMode="SingleTop"></>
若兩個活動相互跳轉循環,仍會重複出現在棧中 (FirstActivity--->SecondActivity----->FA)
3、singleTask
啓動時檢查棧中是否存在該活動的實例,若有則直接使用,且將其之上的活動全部出棧;若無則出棧 註冊文件...
4、singleInstance
啓用一個新的棧來管理這個活動,所有應用程序訪問該活動都共用同一個棧
同一個應用下的多個Activity都是用這個棧,當指定一個Activity使用singleInstance模式則會單獨生成新棧
三、活動的應用--最佳實踐
修改BaseActivity, 重寫onDestroy ()方法
... onCreate( ) { super.onCreate( );ActivityCollector.addActivity( this); }//當前正在創建的活動 添加到 活動管理器
...onDestroy( ){ super.onDestroy( );ActivityCollector.removeActivity(this); }// 要銷燬的活動從 活動管理器 移除
在任意一個地方想要退出,調用方法 ActivityCollector.finishAll( );
3、啓動活動的最佳寫法---不懂
啓動一個新的活動需要傳遞數據,而又不知要傳遞什麼,,,修改SecondActivity(新的Activity)添加方法
public static void actionStart(Context,String,String data2){
Intent intent=new Intent(context ,SecondActivity.class);
intent.putExtra(" param1",data1);...2
context.startActivity(intent); }
啓動該Activity更方便 SecondActivity.actionStart( FirstActivity.this , " data1" ,"data2");
//編寫活動時這樣寫,則方便自己啓動Activity,方便他人調用時知道要傳遞什麼數據
四、使用Intent 在活動間穿梭
1、顯式Intent ---Intent( Context packageContext ,Class<?> cls); startActivity(Intent Object);
2、隱式(不明確指出我們想要啓動哪一活動)通過指定action和category信息,讓系統自己分析調用
新構造方法 Intent(“packageNam.actionName”);
在註冊文件中指定 <intent-filter> <action android:name=" .."/> <category ..../> </ >
根據系統內置動作響應 --網頁 Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.black.com") ); //將網址字符串解析成Uri對象
--電話 ......ACTION_DIAL "tel:10086"
在<intent-filter> 添加 <data >標籤,指定響應的數據類型 <data android:scheme=" http"/> ( 當Intent的Data和標籤中的內容一致纔會響應)
3、傳遞數據
傳遞------ intent.putExtra(" keyName" , data) ; // FirstActivity
接收------ Intent intent=getIntent( ); String data=intent.getStringExtra(" keyName" );...getIntExtra( ..); // SecondActivity
4、返回數據給上一個活動
傳遞: startActivityForResult(intent ,1);// 1爲參數 requestCode 唯一 ---FirstActivity
返回: Intent intent= new Intent( );// 僅用來傳遞數據
intent.putExtra(" " ," ");// --SecondActivity
setResult( RESULT_OK, intent ) ; // 參數resultCode---RESULT_CANCELD向上一個活動返回結果
finish( );
在第二個Activity中若用的不是點擊事件,而是Back鍵 ,則需將以上放在重寫方法 onBackPressed( )
因爲用startActivityForResult ()方法啓動,需重寫方法,用於在SecondActivity被銷燬之後回調一個活動的onActivityResult( )方法
onActivityResult( ){switch( requestCode) {
case 1: if( resultCode==RESULT_OK){....} ...