Android四大組件之活動分析(筆記)

  • 活動被創建執行的第一個方法
  • 隱藏標題欄
  • 在活動中使用Toast
  • 銷燬活動
  • 活動的四種狀態和七種回調方法
  • 對話框式的活動
  • 在活動回收之前保存數據
  • 知曉當前是在哪一個活動
  • 隨時隨地退出程序
  • 啓動活動的最佳寫法

活動被創建執行的第一個方法

    1. public class HelloWorldActivity extends Activity {  
    2.     //onCreate()是活動被創建時必定執行的方法
    3.     @Override  
    4.     protected void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         setContentView(R.layout.hello_world_layout);  //引入hello_world_layout.xml佈局
    7.     }  


隱藏標題欄

在onCreate方法中

  1.     protected void onCreate(Bundle savedInstanceState) {  
  2.         super.onCreate(savedInstanceState);  
  3. requestWindowFeature(Window.FEATURE_NO_TITLE);//必須在setContentView()之前執行,不然會報錯
  4.         setContentView(R.layout.hello_world_layout);  //引入hello_world_layout.xml佈局
  5.     } 


在活動中使用Toast

  1. protected void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.     requestWindowFeature(Window.FEATURE_NO_TITLE);  
  4.     setContentView(R.layout.first_layout);  
  5.   
  6.     Button button1 = (Button) findViewById(R.id.button_1);  
  7.     button1.setOnClickListener(new OnClickListener() {  
  8.         @Override  
  9.         public void onClick(View v) {  
  10.             Toast.makeText(FirstActivity.this"You clicked Button 1",  Toast.LENGTH_SHORT).show();  
  11.         }  
  12.     });  
第一個參數是Context 

第二個參數是文本內容

第三個參數是顯示的時長

>有兩個內置的常量可以選擇Toast.LENGTH_SHORT和Toast.LENGTH_LONG


銷燬活動

直接使用finish(),例如點擊這個按鈕銷燬這個活動。(一般和返回鍵一起使用)

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.     finish();  
  5.     }  
  6. }); 

按下返回鍵會調用onBackPressed()方法。


活動的四種狀態和七種回調方法

Android是使用任務(Task)來管理活動的,一個任務就是一組存放在棧裏的活動的集合,這個棧也被稱作返回棧(Back Stack)


每個活動在其生命週期中最多可能會有四種狀態。

1.運行狀態

2.暫停狀態

3.停止狀態

4.銷燬狀態


Activity類中定義了七個回調方法,覆蓋了活動生命週期的每一個環節。

1.onCreate()

2.onStart

3.onResume()

4.onPause()   這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

5.onStop()

6.onDestroy()

7.onRestart()


完整生存期:onCreate()和onDestroy()方法之間所經歷的

可見生存期:onStart()和onStop()方法之間所經歷的

前臺生存期:onResume()和onPause()方法之間所經歷的


對話框式的活動

  1. <activity android:name=".NormalActivity" >  
  2. </activity>  
  3. <activity android:name=".DialogActivity" android:theme="@android:style/ Theme.Dialog" >  
  4. //指定主題是對話框式,xml文件的代碼和普通的一樣,啓動這個活動是不會遮擋整個屏幕。
  5. </activity>

在活動回收之前保存數據

  1. @Override  
  2. //這個方法會保證一定在活動被回收之前調用
  3. protected void onSaveInstanceState(Bundle outState) {  
  4.     super.onSaveInstanceState(outState);  
  5.     String tempData = "Something you just typed";  
  6.     outState.putString("data_key", tempData);  
取出數據
  1. @Override  
  2. //Bundle參數一般情況下都是null,但是如果有通過onSaveInstanceState()方法來保存數據的話,這個參數會存有之前所保存的全部數據。
  3. protected void onCreate(Bundle savedInstanceState) {  
  4.     super.onCreate(savedInstanceState);  
  5.     setContentView(R.layout.activity_main);  
  6.     if (savedInstanceState != null) {  
  7.         String tempData = savedInstanceState.getString("data_key");  
  8.     }  
  9. }  

Bundle可以結合Intent一起傳遞數據。


知曉當前是在哪一個活動

新建一個AaseActivity類繼承自Activity類並重寫它的方法

  1. public class BaseActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         Log.d("BaseActivity", getClass().getSimpleName());  //獲取當前實例的類名
  6.     }  
讓之後的類繼承這個類


隨時隨地退出程序

新建一個ActivityCollector類作爲活動管理器

  1. public class ActivityCollector {  
  2.     public static List<Activity> activities = new ArrayList<Activity>();  
  3.         public static void addActivity(Activity activity) {  
  4.         activities.add(activity);  
  5.     }  
  6.     public static void removeActivity(Activity activity) {  
  7.         activities.remove(activity);  
  8.     }  
  9.     public static void finishAll() {  
  10.         for (Activity activity : activities) {  
  11.             if (!activity.isFinishing()) {  
  12.                 activity.finish();  
  13.             }  
  14.         }  
  15.     }  
  16. }
在BaseActivity類中

  1. public class BaseActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         ActivityCollector.addActivity(this);  
  6.     }  
  7.     @Override  
  8.     protected void onDestroy() {  
  9.         super.onDestroy();  
  10.         ActivityCollector.removeActivity(this);  
  11.     }  
  12. }  
然後只要在任何地方調用ActivityCollector.finishAll()方法即可


啓動活動的最佳寫法

在要啓動的活動中(目的活動)

  1. public class SecondActivity extends BaseActivity {  
  2.     public static void actionStart(Context context, String data1, String data2) {  
  3.         Intent intent = new Intent(context, SecondActivity.class);  
  4.         intent.putExtra("param1", data1);  
  5.         intent.putExtra("param2", data2);  
  6.         context.startActivity(intent);  
  7.     }  
  8. //添加了一個actionStart()方法,在這個方法中完成了Intent的構建,另外所有SecondActivity中需要的數據都是通過actionStart()方法的參數傳遞過來的,然後把它們存儲到Intent中,最後調用startActivity()方法啓動SecondActivity。
  9.     ……  
  10. }
在出發活動中

  1. button1.setOnClickListener(new OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View v) {  
  4.         SecondActivity.actionStart(FirstActivity.this"data1""data2");  
  5.     }  
  6. }); 

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