什么是Activity
An Activity
is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface. The window typically fills the screen, but may be smaller than the screen and float on top of other windows.
Activity是应用的组件之一,充满整个窗口或者悬浮在其他窗口之上,负责与用户交互的界面。
每一个Activity都需要在AandroidManifest.xml文件中的<activity>标签注册。
Activity的生命周期
package com.k1.test;
import android.os.Bundle;
import android.util.Log;
public class ActivityLifeCycleA extends ParentActivity {
public static final String TAG = "activity_life_cycle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
Log.v(TAG, "ActivityA onCreate()......");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v(TAG, "ActivityA onRestart()......");
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "ActivityA onStart()......");
}
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, "ActivityA onResume()......");
}
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "ActivityA onPause()......");
}
@Override
protected void onStop() {
super.onStop();
Log.v(TAG, "ActivityA onStop()......");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "ActivityA onDestroy()......");
}
}
package com.k1.test;
import android.os.Bundle;
import android.util.Log;
public class ActivityLifeCycleB extends ParentActivity {
public static final String TAG = "activity_life_cycle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
Log.v(TAG, "ActivityB onCreate()......");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v(TAG, "ActivityB onRestart()......");
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "ActivityB onStart()......");
}
@Override
protected void onResume() {
super.onResume();
Log.v(TAG, "ActivityB onResume()......");
}
@Override
protected void onPause() {
super.onPause();
Log.v(TAG, "ActivityB onPause()......");
}
@Override
protected void onStop() {
super.onStop();
Log.v(TAG, "ActivityB onStop()......");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "ActivityB onDestroy()......");
}
}
运行结果如下图所示:
Activity的状态保存
状态保存跟上面所述Activity的生命周期函数类似,只需要重写onSaveInstanceState()和onRestoreInstanceState(),在onSaveInstanceState中将需要保存的参数写入到一个Bundle中,在onCreate或者onRestoreInstanceState()中取出,并赋值给相应的控件即可。
Activity在栈中的形式
栈的特点,先进后出。应用启动,那么Activity1初始化完成并添加的栈的顶端;启动Activity2,将Activity1压入栈底,Activity2添加到栈的顶端;启动Activity3同Activity2.弹出的顺序依次将顶端的Activity弹出,直到清空栈,此应用结束。
Activity的两种启动方式
-
直接跳转到下一个Activity。startActivity(Intent intent),这个很简单,不再累述。
- 带返回结果。startActivityForResult(Intent intent),此方式在第二个Activity中处理相关内容并返回给当前的Activity。这里的关键就是requestCode跟resultCode。
下面一个简单的例子,ActivityA跳转到ActivityC,然后在ActivityC中输入任意内容并返回给ActivityA:
startActivityForResult(new Intent(this, ActivityC.class), 0);
上面这段代码需要两个参数,一个是Intent,一个是requestCode,下面是返回结果的方法:
Intent intent = new Intent(ActivityC.this, ActivityLifeCycleA.class);
intent.putExtra("test", "test startActivityForResult(Intent intent)");
setResult(RESULT_OK, intent);
finish();
这里有一点需要注意的在设置完结果之后必须调用finish(),否则Acitivty会停留在当前界面不会返回。下面是接收结果的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0 && resultCode == RESULT_OK) {
((TextView) findViewById(R.id.textView1)).setText(data
.getStringExtra("test"));
}
}
只需要重写onActivityResult(int requestCode, int resultCode, Intent data)方法即可。
例子下载地址:http://download.youkuaiyun.com/detail/k1_king/5014361