Android提高第四篇之Activity+Intent

本文来自http://blog.csdn.net/hellogv/,引用必须注明出处!

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. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <Buttonandroid:layout_width="wrap_content"
  6. android:layout_height="wrap_content"android:id="@+id/main1.Button01"
  7. android:text="跳转到Activity2"></Button>
  8. <EditTextandroid:text="@+id/EditText01"android:id="@+id/EditText01"
  9. android:layout_width="wrap_content"android:layout_height="wrap_content"></EditText>
  10. <Buttonandroid: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. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <LinearLayoutandroid: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. <Buttonandroid:layout_width="wrap_content"
  6. android:layout_height="wrap_content"android:id="@+id/main2.Button01"
  7. android:text="返回Activity1"></Button>
  8. </LinearLayout>

Activity1的源码:

  1. packagecom.testActivityIntent;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.content.SharedPreferences;
  5. importandroid.net.Uri;
  6. importandroid.os.Bundle;
  7. importandroid.util.Log;
  8. importandroid.view.View;
  9. importandroid.widget.Button;
  10. importandroid.widget.EditText;
  11. publicclasstestActivityIntentextendsActivity{
  12. /**Calledwhentheactivityisfirstcreated.*/
  13. ButtonbtnToInternalActivity;
  14. ButtonbtnToExternalActivity;
  15. EditTexttbBundle;
  16. @Override
  17. publicvoidonCreate(BundlesavedInstanceState){
  18. super.onCreate(savedInstanceState);
  19. Log.e("Activity1","onCreate");//显示当前状态,onCreate与onDestroy对应
  20. setContentView(R.layout.main1);
  21. btnToInternalActivity=(Button)this.findViewById(R.id.main1_Button01);
  22. btnToExternalActivity=(Button)this.findViewById(R.id.main1_Button02);
  23. btnToInternalActivity.setOnClickListener(newClickEvent());
  24. btnToExternalActivity.setOnClickListener(newClickEvent());
  25. tbBundle=(EditText)this.findViewById(R.id.EditText01);
  26. }
  27. publicvoidonDestroy()
  28. {
  29. super.onDestroy();
  30. Log.e("Activity1","onDestroy");//显示当前状态,onCreate与onDestroy对应
  31. }
  32. @Override
  33. publicvoidonStart()
  34. {
  35. super.onStart();
  36. Log.e("Activity1","onStart");//显示当前状态,onStart与onStop对应
  37. }
  38. @Override
  39. publicvoidonStop()
  40. {
  41. super.onStop();
  42. Log.e("Activity1","onStop");//显示当前状态,onStart与onStop对应
  43. }
  44. @Override
  45. publicvoidonRestart()
  46. {
  47. super.onRestart();
  48. Log.e("Activity1","onRestart");
  49. }
  50. @Override
  51. publicvoidonResume()
  52. {
  53. super.onResume();
  54. Log.e("Activity1","onResume");//显示当前状态,onPause与onResume对应
  55. SharedPreferencesprefs=getPreferences(0);//SharedPreferences用于存储数据
  56. StringrestoredText=prefs.getString("editText01",null);
  57. if(restoredText!=null){
  58. this.tbBundle.setText(restoredText);
  59. }
  60. }
  61. @Override
  62. publicvoidonPause()
  63. {
  64. super.onResume();
  65. Log.e("Activity1","onPause");//显示当前状态,onPause与onResume对应
  66. //保存文本框的内容,使得重回本Acitivity的时候可以恢复
  67. SharedPreferences.Editoreditor=getPreferences(0).edit();//SharedPreferences用于存储数据
  68. editor.putString("editText01",this.tbBundle.getText().toString());
  69. editor.commit();
  70. }
  71. classClickEventimplementsView.OnClickListener{
  72. @Override
  73. publicvoidonClick(Viewv){
  74. if(v==btnToInternalActivity)
  75. {
  76. Intentintent=newIntent();
  77. intent.setClass(testActivityIntent.this,Activity2.class);
  78. //new一个Bundle对象,并将要传递的数据传入
  79. Bundlebundle=newBundle();
  80. bundle.putString("Text",tbBundle.getText().toString());
  81. //将Bundle对象assign给Intent
  82. intent.putExtras(bundle);
  83. //调用Activity2
  84. startActivity(intent);
  85. testActivityIntent.this.finish();//会触发onDestroy();
  86. }
  87. elseif(v==btnToExternalActivity)
  88. {
  89. //有些外部调用需要开启权限
  90. Uriuri=Uri.parse("http://google.com");
  91. Intentit=newIntent(Intent.ACTION_VIEW,uri);
  92. startActivity(it);
  93. }
  94. }
  95. }
  96. }

Activity2的源码:

  1. packagecom.testActivityIntent;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.util.Log;
  6. importandroid.view.View;
  7. importandroid.widget.Button;
  8. publicclassActivity2extendsActivity{
  9. ButtonbtnBackMain1;
  10. publicvoidonCreate(BundlesavedInstanceState)
  11. {
  12. super.onCreate(savedInstanceState);
  13. Log.e("Activity2","onCreate");//显示当前状态,onCreate与onDestroy对应
  14. //加载activity2.xml
  15. setContentView(R.layout.main2);
  16. //得Intent中的Bundle对象
  17. Bundlebunde=this.getIntent().getExtras();
  18. //取得Bundle对象中的数据
  19. Log.i("In_Text",bunde.getString("Text"));
  20. btnBackMain1=(Button)this.findViewById(R.id.main2_Button01);
  21. btnBackMain1.setOnClickListener(newClickEvent());
  22. }
  23. publicvoidonDestroy()
  24. {
  25. super.onDestroy();
  26. Log.e("Activity2","onDestroy");//显示当前状态,onCreate与onDestroy对应
  27. }
  28. @Override
  29. publicvoidonStart()
  30. {
  31. super.onStart();
  32. Log.e("Activity2","onStart");//显示当前状态,onStart与onStop对应
  33. }
  34. @Override
  35. publicvoidonStop()
  36. {
  37. super.onStop();
  38. Log.e("Activity2","onStop");//显示当前状态,onStart与onStop对应
  39. }
  40. @Override
  41. publicvoidonRestart()
  42. {
  43. super.onRestart();
  44. Log.e("Activity2","onRestart");
  45. }
  46. @Override
  47. publicvoidonResume()
  48. {
  49. super.onResume();
  50. Log.e("Activity2","onResume");//显示当前状态,onPause与onResume对应
  51. }
  52. @Override
  53. publicvoidonPause()
  54. {
  55. super.onResume();
  56. Log.e("Activity2","onPause");//显示当前状态,onPause与onResume对应
  57. }
  58. classClickEventimplementsView.OnClickListener{
  59. @Override
  60. publicvoidonClick(Viewv){
  61. if(v==btnBackMain1)
  62. {
  63. Intentintent=newIntent();
  64. intent.setClass(Activity2.this,testActivityIntent.class);
  65. //调用Activity1
  66. startActivity(intent);
  67. Activity2.this.finish();//会触发onDestroy();
  68. }
  69. }
  70. }
  71. }

你可能感兴趣的:(Activity)