1. 程式人生 > >(Android第一行程式碼實驗一)活動的最佳實踐

(Android第一行程式碼實驗一)活動的最佳實踐

活動的最佳實踐

   1.知曉當前是在哪一個活動

        這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。

  •  首先需要新建一個 BaseActivity 繼承自 Activity,然後在 BaseActivity中重寫 onCreate()方法。
  •  public class BaseActivity extends Activity {   
    
                @Override 
    
                protected
    void onCreate(Bundle savedInstanceState) { //在 onCreate()方法中獲取了當前例項的類名,並通過 Log列印了出來。 super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); } }

    接下來我們需要讓 BaseActivity 成為 ActivityTest 專案中所有活動的父類修改 FirstActivity、SecondActivity和 ThirdActivity的繼承結構,讓它們不再繼承自 Activity,而是 繼承自 BaseActivity。現在重新執行程式,然後通過點選按鈕分別進入到 FirstActivity、SecondActivity 和 ThirdActivity的介面,這時該活動的類名就會被打印出來,

         這樣我們就可以 時時刻刻知曉當前介面對應的是哪一個活動了,觀察logcat中的列印資訊就可以時時刻刻知曉當前介面對應的是哪一個活動了。

  •   2.隨時隨地退出程式

  •             你會發現當前想退出程式是非常不方便 的,需要連按三次 Back 鍵才行,該方法可以解決這個問題。

           解決思路:

                 只需要用一個專門的集合類對所有的活動進行管理就可以了,

    •       新建一個 ActivityCollector類作為活動管理器
       public class ActivityCollector {  
      
                   //,我們通過一個 List來暫存活動,
      
                     public static List<Activity> activities = new ArrayList<Activity>();
      
                   //然後提供了一個 addActivity()方法用 於向 List 中新增一個活動
       
                     public static void addActivity(Activity activity) { 
      
                                activities.add(activity); 
      
                       } 
                  //提供了一個 removeActivity()方法用於從 List 中移除活動。
                      public static void removeActivity(Activity activity) { 
      
                              activities.remove(activity); 
      
                      } 
                 //最後 提供了一個 finishAll()方法用於將 List中儲存的活動全部都銷燬掉。
                     public static void finishAll() {
      
                        for (Activity activity : activities) {  
      
                        if (!activity.isFinishing()) {   
      
                        activity.finish();   
      
                            }
      
                   } 
      
               } 
      }
      •   修改 BaseActivity中的程式碼
        public class BaseActivity extends Activity { 
         
                       @Override
        
                      protected void onCreate(Bundle savedInstanceState) {  
        
                              super.onCreate(savedInstanceState);  
        
                              Log.d("BaseActivity", getClass().getSimpleName());
        
                     //呼叫了 ActivityCollector 的 addActivity()方法,表明 將當前正在建立的活動新增到活動管理器裡
        
                             ActivityCollector.addActivity(this); 
        
                        }   
        
                               @Override 
        
                   //重寫 onDestroy()方法, 並呼叫了 ActivityCollector 的 removeActivity()方法,表明將一個馬上要銷燬的活動從活動管 理器裡移除。
        
                    protected void onDestroy() { 
        
                    super.onDestroy(); 
        
                     ActivityCollector.removeActivity(this); 
        
                     }  
        
            }

             從此以後,不管你想在什麼地方退出程式,只需要呼叫 ActivityCollector.finishAll()方法 就可以了.

         Button button3 = (Button) findViewById(R.id.button_3);
        
                 button3.setOnClickListener(new OnClickListener() { 
        
                       @Override
        
                     public void onClick(View v) {  
        
                //呼叫 ActivityCollector.finishAll()方法
        
                         ActivityCollector.finishAll();  
        
                        }
        
                  }); 

        3.啟動活動的最佳寫法

        •     啟動 SecondActivity傳遞字串引數最佳寫法。
           public class SecondActivity extends BaseActivity { 
          
                /*所有 SecondActivity中需要的資料都是通過 actionStart()方法的引數傳遞過來的,然 後把它們儲存到 Intent中,最後呼叫 startActivity()方法啟動                 SecondActivity。*/
          
                           public static void actionStart(Context context, String data1, String data2) { 
          
                                    Intent intent = new Intent(context, SecondActivity.class); 
          
                                    intent.putExtra("param1", data1);
          
                                    intent.putExtra("param2", data2); 
          
                                     context.startActivity(intent); 
          
                                }  ……
          
                       }

            這樣寫是一目瞭然,SecondActivity 所需要的資料全 部都在方法引數中體現出來了.

          •    現在只需要一行程式碼就可以啟動 SecondActivity
               button1.setOnClickListener(new OnClickListener() {
            
                                    @Override
            
                              public void onClick(View v) { 
            
                                //傳入引數
            
                                   SecondActivity.actionStart(FirstActivity.this, "data1", "data2"); 
            
                           }
            
                    });