Activity,是Android中一个重要的组件。就像任务管理进程,每个Activity负责一个任务,一般都是一个页面对应一个Activity,Activity负责响应当前页面的所有请求和处理。而Activity的生命周期,也和进程很类似,它有创建(OnCreate)、开始(onStart)、暂停(onPause)、唤醒(onResume)、停止(onStop)、重启(onRestart)、销毁(onDestroy)等状态。下面一幅图,清楚地描述了这些状态的转变:

Activity启动的流程包括:onCreate()->onStart()->onResume()

Activity关闭的流程包括:onPause()->onStop()->onDestroy()。

Activity重启的流程包括:onPause()->onResume()或者onStop()->onRestart()

下面再通过实例来讲述Activity的生命周期:

(1)启动Activity1

(2)从Activity1中启动Activity2(注意Activity1这里并没有调用finish()方法)

(3)从Activity2中返回Activity1(注意Activity2这里调用了finish()方法,会引发onDestroy()方法)

(4)退出Activity1,程序结束

可以看出Activity1经历的生命周期为:onCreate()->onStart()->onResume()->onPause()->onStop()->onRestart()->onResume()->onPause()->onStop()->onDestroy()

Activity2经历的生命周期为:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()

实例视图与具体代码如下:

1、布局文件

Activity1的布局文件main.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="输入字符串:"/> <EditText android:id="@+id/et_string" android:layout_width="203px" android:layout_height="47px" android:textSize="18sp"/> </LinearLayout> <Button android:id="@+id/bt_toActivity2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="计算字符串长度"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="字符串长度为: "/> <TextView android:id="@+id/tv_result" android:layout_width="202px" android:layout_height="wrap_content" android:textSize="18sp"/> </LinearLayout> <Button android:id="@+id/bt_url" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="打开百度网站"/> </LinearLayout>

Activity2的布局文件 mylayout.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 显示结果 --> <TextView android:id="@+id/tv_showResult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <!-- 返回另一个Activity --> <Button android:id="@+id/bt_back" android:layout_width="100px" android:layout_height="wrap_content" android:text="返回" /> </LinearLayout>

2、代码

Activity1的程序代码

package com.myandroid.test; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class ActivityIntent extends Activity { private Button bt_toActivity; private Button bt_outsideIntent; private EditText et_string; private TextView tv_result; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.e("Lifecycle_Activity1", "onCreate()"); et_string = (EditText) findViewById(R.id.et_string); bt_toActivity = (Button) findViewById(R.id.bt_toActivity2); bt_outsideIntent = (Button) findViewById(R.id.bt_url); tv_result = (TextView) findViewById(R.id.tv_result); bt_toActivity.setOnClickListener(new ClickEvent()); bt_outsideIntent.setOnClickListener(new ClickEvent()); } //销毁:onPause()->onStop()->onDestroy() @Override protected void onDestroy() { super.onDestroy(); Log.e("Lifecycle_Activity1", "onDestroy()"); } //暂停:onStart()->onPause() @Override protected void onPause() { super.onPause(); Log.e("Lifecycle_Activity1", "onPause()"); //把数据保存到类似于Session之类的存储集合里面 SharedPreferences.Editor saveData = getPreferences(0).edit(); saveData.putString("value", et_string.getText().toString()); saveData.commit(); } //重启:onPause()->onResume() @Override protected void onResume() { super.onResume(); Log.e("Lifecycle_Activity1", "onResume()"); //从共享数据存储对象中获取所需的数据 SharedPreferences getData = getPreferences(0); String value = getData.getString("value", null); if(value != null) { et_string.setText(value); } } //开始:onCreate()->onStart() @Override protected void onStart() { super.onStart(); Log.e("Lifecycle_Activity1", "onStart()"); } //停止:onPause()->onStop() @Override protected void onStop() { super.onStop(); Log.e("Lifecycle_Activity1", "onStop()"); } //重启:onStop()->reonRestart() @Override protected void onRestart() { super.onRestart(); Log.e("Lifecycle_Activity1", "onRestart()"); } /** * 处理上一个Activity的返回结果 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch(resultCode) { case RESULT_OK: //执行成功,返回 Bundle bundle = data.getExtras(); //获取intent里面的bundle对象 int length = bundle.getInt("result"); tv_result.setText("" + length); break; default: break; } } //重写点击监听器类 class ClickEvent implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.bt_toActivity2: //跳转到另一个Activity Intent intent = new Intent(); intent = intent.setClass(ActivityIntent.this, AnotherActivity.class); Bundle bundle = new Bundle(); bundle.putString("string", et_string.getText().toString()); intent.putExtras(bundle); startActivityForResult(intent,0); //采用Activity间信息交流启动方式, //比如A启动B,B结束后,返回到A的同时会执行 onActivityResult()方法 //处理上一个Activity即B传递的结果集。 //ActivityIntent.this.finish(); //会触发onDestroy(); break; case R.id.bt_url: //Intent还可以调用外部组件,但有些组件会有权限控制 Uri uri = Uri.parse("http://www.baidu.com"); Intent outerIntent = new Intent(Intent.ACTION_VIEW, uri); startActivity(outerIntent); break; default: break; } } } }

Activity2的程序代码

package com.myandroid.test; import java.text.DecimalFormat; import java.text.NumberFormat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class AnotherActivity extends Activity { private String string; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylayout); Log.e("Lifecycle_Activity1", "onCreate()"); Intent intent = this.getIntent(); //获取intent对象 Bundle bundle = intent.getExtras(); //获取intent里面的bundle对象 string = bundle.getString("string"); //获取字符串 ((TextView)findViewById(R.id.tv_showResult)).setText( "字符串 " + string +" 长度为: " + string.length()); Button bt_back = (Button) findViewById(R.id.bt_back); bt_back.setOnClickListener(new ClickEvent()); } @Override protected void onDestroy() { //销毁:onPause()->onStop()->onDestroy() // TODO Auto-generated method stub super.onDestroy(); Log.e("Lifecycle_Activity2", "onDestroy()"); } @Override protected void onPause() { //暂停:onStart()->onPause() // TODO Auto-generated method stub super.onPause(); Log.e("Lifecycle_Activity2", "onPause()"); } @Override protected void onResume() { //重启:onPause()->onResume() // TODO Auto-generated method stub super.onResume(); Log.e("Lifecycle_Activity2", "onResume()"); } @Override protected void onStart() { //开始:onCreate()->onStart() // TODO Auto-generated method stub super.onStart(); Log.e("Lifecycle_Activity2", "onStart()"); } @Override protected void onStop() { //停止:onPause()->onStop() // TODO Auto-generated method stub super.onStop(); Log.e("Lifecycle_Activity2", "onStop()"); } @Override protected void onRestart() { //重启 // TODO Auto-generated method stub super.onRestart(); Log.e("Lifecycle_Activity2", "onRestart()"); } class ClickEvent implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.bt_back: Intent intent = new Intent(); intent = intent.setClass(AnotherActivity.this, ActivityIntent.class); Bundle bundle = new Bundle(); bundle.putInt("result", string.length()); intent.putExtras(bundle); //返回刚刚创建的intent给上一个Activity,并且关闭当前Activity AnotherActivity.this.setResult(RESULT_OK, intent); AnotherActivity.this.finish(); //会触发onDestroy(); break; default: break; } } } }

最后记得在AndroidManifest.xml添加Activity2的信息,如下:

<application android:icon="@drawable/icon" android:label="@string/app_name"> ............ <activity android:name="AnotherActivity"></activity> </application>

下一篇补充下Activity之间的跳转和传值,以及从如何获取上一个Activity返回的结果和数据状态保存等内容。简单的说,Intent、Bundle、SharedPreferences等应用。

更多相关文章

  1. Android(安卓)setContentView 实现同一个activity下不同view的切
  2. Android(安卓)Studio 怎么添加使用第三方jar包及无法编译的问题
  3. Android中的 View绘制流程及事件分发
  4. Android异步任务机制之AsycTask
  5. Android(安卓)关于fragment切换
  6. Android(安卓)HttpClient GET或者POST请求基本使用方法
  7. Android(安卓)Scroller简单用法
  8. 安卓基础到入门学习(复习笔记)
  9. Android(安卓)最火的快速开发框架XUtils

随机推荐

  1. json解析查找指定数据字段
  2. Android(安卓)5.1.1 Error inflating cla
  3. Android(安卓)-- Dialog动画
  4. Android(安卓)Studio 使用Gradle在Termin
  5. listview android:cacheColorHint,androi
  6. Android延时任务方法
  7. Android-- 输入法键盘控制
  8. Androi:ViewPager
  9. Android的Location功能代码
  10. Android(安卓)获取IMEI(Android(安卓)10