Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android提高21篇之四:Activity與Intent

Android提高21篇之四: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。

       先貼出本文運行截圖:

 Android提高21篇之四:Activity與Intent

Android提高21篇之四:Activity與Intent

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

Android提高21篇之四:Activity與Intent 

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

       main1.xml的源碼:

XML/HTML代碼
  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的源碼:

XML/HTML代碼
  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的源碼:

Java代碼
  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.        
  105. }  

       Activity2的源碼:

Java代碼
  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