Activity

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模式則會單獨生成新棧


三、活動的應用--最佳實踐

1、知曉當前在哪一個活動
   新建一個BaseActivity繼承Activity,重寫onCreate( )方法,使該BaseActivity 成爲項目中所有活動的父類,通過改寫的方法打印出每個界面所在的類名
    onCreate( ){  super.onCreate( );Log.d(" tag", getClass( ).getSimpleName( ));     )
2、隨時隨地退出程序
   新建一個類活動管理器,通過List暫存Activity,可添加、可移除所有活動
public class ActivityCollector{  public static List<Activity> activities= new ArrayList< >( );
      public static void addActivity( Activity){ activities.add( activity) ;}
......  removeActivity( ){  //同理 }
......  finishAll( ){     for( Activity activity: activities){if(!activity.isFinishing( ) ){      activity.finish( );} ...

  修改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){....} ... 































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章