Android提高第四篇之Activity+Intent

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提高第四篇之Activity+Intent

Android提高第四篇之Activity+Intent

这个是从Acitivity1转到Activity2的时候,Acitivity1的状态变化,使用了finish()会触发onDestroy()。

Android提高第四篇之Activity+Intent

这 个是从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.       
  105. }  

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.     }  

你可能感兴趣的:(.net,android,xml,OS,Google)