Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android提高第四篇之Activity+Intent

Android提高第四篇之Activity+Intent

編輯:Android開發實例

      Android有三個基礎組件Activity,Service和BroadcastReceiver,他們都是依賴Intent來啟動。本文介紹的是Activity的生命周期以及針對Activity的Intent使用。

        之前的例子一直都是使用Activity,在一個Layout XML與一個Activity捆綁的情況下可以視為一個Form,多個Layout XML與一個Activity捆綁的話那就是個Application本身了。Intent可以分為顯式Intent和隱式Intent:顯式Intent用於啟動明確的目標組件(前面所說的三大組件),同一個Application內的多個Activity調用也是顯式Intent;隱式Intent就是調用沒有明確的目標組件,可以是系統也可以是第三方程序。隱式Intent一般用於調用系統組件功能,相關例程都是網絡上很容易找到的(調用某些系統組件的時候要申請權限)。

        Acitivity的運行狀況分為:onCreate、onDestroy、onStart、onStop、onRestart、onResume、onPause,onCreate對應onDestroy,onStart對應onStop,onResume對應onPause。

先貼出本文運行截圖:

這個是從Acitivity1轉到Activity2的時候,Acitivity1的狀態變化,使用了finish()會觸發onDestroy()。

這個是從Activity2轉到Activity1的時候,Acitivity2的狀態變化。從兩次Activity的啟動可以看出,流程是onCreate()->onStart()->onResume()三個方法,銷毀是onPause()->onStop()->onDestroy()。另外,要往工程添加第二個Activity,需要到AndroidManifest.xml->Application那裡添加Activity2。

main1.xml的源碼:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:orientation="vertical" android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent"> 
  5.     <Button android:layout_width="wrap_content" 
  6.         android:layout_height="wrap_content" android:id="@+id/main1.Button01" 
  7.         android:text="跳轉到Activity2"></Button> 
  8.     <EditText android:text="@+id/EditText01" android:id="@+id/EditText01" 
  9.         android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> 
  10.     <Button android:layout_width="wrap_content" 
  11.         android:layout_height="wrap_content" android:id="@+id/main1.Button02" 
  12.         android:text="跳轉到外部Activity"></Button> 
  13. </LinearLayout> 

 

 

main2.xml的源碼:

 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <LinearLayout android:id="@+id/LinearLayout01" 
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent" 
  4.     xmlns:android="http://schemas.android.com/apk/res/android"> 
  5.     <Button android:layout_width="wrap_content" 
  6.         android:layout_height="wrap_content" android:id="@+id/main2.Button01" 
  7.         android:text="返回Activity1"></Button> 
  8. </LinearLayout> 

 

Activity1的源碼:

  1. package com.testActivityIntent;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.content.SharedPreferences;  
  5. import android.net.Uri;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.View;  
  9. import android.widget.Button;  
  10. import android.widget.EditText;  
  11. public class testActivityIntent extends Activity {  
  12.     /** Called when the activity is first created. */ 
  13.     Button btnToInternalActivity;  
  14.     Button btnToExternalActivity;  
  15.     EditText tbBundle;  
  16.     @Override 
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         Log.e("Activity1", "onCreate");//顯示當前狀態,onCreate與onDestroy對應  
  20.         setContentView(R.layout.main1);  
  21.           
  22.         btnToInternalActivity=(Button)this.findViewById(R.id.main1_Button01);  
  23.         btnToExternalActivity=(Button)this.findViewById(R.id.main1_Button02);  
  24.         btnToInternalActivity.setOnClickListener(new ClickEvent());  
  25.         btnToExternalActivity.setOnClickListener(new ClickEvent());  
  26.         tbBundle=(EditText)this.findViewById(R.id.EditText01);          
  27.     }  
  28.     public void onDestroy()  
  29.     {  
  30.         super.onDestroy();  
  31.         Log.e("Activity1", "onDestroy");//顯示當前狀態,onCreate與onDestroy對應  
  32.     }  
  33.     @Override 
  34.     public void onStart()  
  35.     {  
  36.         super.onStart();  
  37.         Log.e("Activity1", "onStart");//顯示當前狀態,onStart與onStop對應   
  38.     }  
  39.     @Override 
  40.     public void onStop()  
  41.     {  
  42.         super.onStop();  
  43.         Log.e("Activity1", "onStop");//顯示當前狀態,onStart與onStop對應    
  44.     }  
  45.     @Override 
  46.     public void onRestart()  
  47.     {  
  48.         super.onRestart();  
  49.         Log.e("Activity1", "onRestart");  
  50.     }  
  51.     @Override 
  52.     public void onResume()  
  53.     {  
  54.         super.onResume();  
  55.         Log.e("Activity1", "onResume");//顯示當前狀態,onPause與onResume對應    
  56.         SharedPreferences prefs = getPreferences(0); //SharedPreferences 用於存儲數據  
  57.         String restoredText = prefs.getString("editText01", null);  
  58.         if (restoredText != null) {  
  59.             this.tbBundle.setText(restoredText);  
  60.         }  
  61.     }  
  62.     @Override 
  63.     public void onPause()  
  64.     {  
  65.         super.onResume();  
  66.         Log.e("Activity1", "onPause");//顯示當前狀態,onPause與onResume對應     
  67.         //保存文本框的內容,使得重回本Acitivity的時候可以恢復  
  68.         SharedPreferences.Editor editor = getPreferences(0).edit();//SharedPreferences 用於存儲數據  
  69.         editor.putString("editText01", this.tbBundle.getText().toString());  
  70.         editor.commit();  
  71.     }  
  72.       
  73.     class ClickEvent implements View.OnClickListener{  
  74.         @Override 
  75.         public void onClick(View v) {  
  76.             if(v==btnToInternalActivity)  
  77.             {  
  78.                 Intent intent = new Intent();  
  79.                 intent.setClass(testActivityIntent.this,Activity2.class);  
  80.                   
  81.                 //new一個Bundle對象,並將要傳遞的數據傳入  
  82.                 Bundle bundle = new Bundle();  
  83.                 bundle.putString("Text",tbBundle.getText().toString());  
  84.                 
  85.                 //將Bundle對象assign給Intent  
  86.                 intent.putExtras(bundle);  
  87.                 
  88.                 //調用Activity2  
  89.                 startActivity(intent);  
  90.                   
  91.                 testActivityIntent.this.finish();//會觸發onDestroy();  
  92.             }  
  93.             else if(v==btnToExternalActivity)  
  94.             {  
  95.                 //有些外部調用需要開啟權限  
  96.                 Uri uri = Uri.parse("http://google.com");     
  97.                 Intent it = new Intent(Intent.ACTION_VIEW, uri);     
  98.                 startActivity(it);   
  99.             }  
  100.               
  101.         }  
  102.           
  103.     }  
  104.       

 

 

Activity2的源碼:

 

  1. package com.testActivityIntent;     
  2. import android.app.Activity;     
  3. import android.content.Intent;     
  4. import android.os.Bundle;     
  5. import android.util.Log;     
  6. import android.view.View;     
  7. import android.widget.Button;     
  8. public class Activity2  extends Activity {     
  9.     Button btnBackMain1;     
  10.     public void onCreate(Bundle savedInstanceState)     
  11.       {     
  12.         super.onCreate(savedInstanceState);     
  13.         Log.e("Activity2", "onCreate");//顯示當前狀態,onCreate與onDestroy對應     
  14.              
  15.         //加載activity2.xml     
  16.         setContentView(R.layout.main2);     
  17.              
  18.         //得Intent中的Bundle對象     
  19.         Bundle bunde = this.getIntent().getExtras();     
  20.         //取得Bundle對象中的數據      
  21.         Log.i("In_Text", bunde.getString("Text"));     
  22.         btnBackMain1=(Button)this.findViewById(R.id.main2_Button01);     
  23.         btnBackMain1.setOnClickListener(new ClickEvent());     
  24.       }     
  25.          
  26.     public void onDestroy()     
  27.     {     
  28.         super.onDestroy();     
  29.         Log.e("Activity2", "onDestroy");//顯示當前狀態,onCreate與onDestroy對應     
  30.     }     
  31.     @Override    
  32.     public void onStart()     
  33.     {     
  34.         super.onStart();     
  35.         Log.e("Activity2", "onStart");//顯示當前狀態,onStart與onStop對應      
  36.     }     
  37.     @Override    
  38.     public void onStop()     
  39.     {     
  40.         super.onStop();     
  41.         Log.e("Activity2", "onStop");//顯示當前狀態,onStart與onStop對應       
  42.     }     
  43.     @Override    
  44.     public void onRestart()     
  45.     {     
  46.         super.onRestart();     
  47.         Log.e("Activity2", "onRestart");         
  48.     }     
  49.     @Override    
  50.     public void onResume()     
  51.     {     
  52.         super.onResume();     
  53.         Log.e("Activity2", "onResume");//顯示當前狀態,onPause與onResume對應           
  54.     }     
  55.     @Override    
  56.     public void onPause()     
  57.     {     
  58.         super.onResume();     
  59.         Log.e("Activity2", "onPause");//顯示當前狀態,onPause與onResume對應        
  60.     }     
  61.          
  62.     class ClickEvent implements View.OnClickListener{     
  63.         @Override    
  64.         public void onClick(View v) {     
  65.             if(v==btnBackMain1)     
  66.             {     
  67.                      
  68.                 Intent intent = new Intent();     
  69.                 intent.setClass(Activity2.this,testActivityIntent.class);     
  70.                      
  71.                 //調用Activity1     
  72.                 startActivity(intent);     
  73.                      
  74.                 Activity2.this.finish();//會觸發onDestroy();     
  75.             }     
  76.                  
  77.         }     
  78.              
  79.     }     
  80. }    

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved