一.什么是Activity
Activity是android的四大组件之一,提供与用户交互的可视化界面(GUI),例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制你想要的View。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
简单的说activity就是UI与交互。
一个应用程序通常由多个Activity组成,他们通常是松耦合关系。通常,
一个应用程序中的activity被指定为"main"activity,就像java的入口main函数,当第一次启动应用程序的时候呈现给用户的那个activity。
每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。
当一个activity因新的activity启动而停止,它被通知这种状态转变通过activity的生命周期回调函数。有许多回调函数一个activity可能会收到,源于它自己的状态变化-无论系统创建它、停止它、恢复它、摧毁它并且每个回调提供你完成适合这个状态的指定工作的机会。例如,当停止的时候,你的activity应该释放任何大的对象,例如网络数据库连接。当activity恢复,你可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是activity的生命周期的部分。
原因:
二.Activity的生命周期
了解Activity的生命周期的根本目的就是为了设计用户体验更加良好的应用。因为Activity就相当于MVC中的View层,是为了更好的向用户展现数据,并与之交互。了解Activity的生命周期和各回调方法的触发时机,我们可以更好的在合适的地方向用户展现数据(因为每个应用每个Activity的作用不同,所以具体每个回调方法的最佳实践不好把握,但是只要遵循最基本的原则即可),保证数据的完整性和程序的良好运行。
activity生命周期解析
1).activity首次被创建时,回调用onCreate()方法.显示给用户时,调用onResume()方法,此时activity位于栈顶。
应该在onCreate()方法里执行设置“全局”状态(如定义布局)
|
2
).当另一个activity覆盖当前的activity时,回调用onPause()方法,并将当前的activity数据保存下来
|
3
).此时,如果想让一个activity不显示的话,调用onStop()方法停止该activity。如果想让一个activity回到前台,重新获得焦点,调用onResume()方法
|
4
).onStop()后,调用onDestroy()方法销毁activity,也是该activity最后一次调用。也可以手动调用finish()结束activity。
在onDestroy()方法里释放所有剩余资源。
|
5
).当内存资源不足时,可能杀死处于onPause()的activity所在进程。但是这种极端情况还是很少 发现的。
|
三.Activity的使用
1.自定义activity的类名并继承activiy或者activity的子类
public class MainActivity extends Activity {
|
2.重写onCreate()方法,在该方法中调用setContentView()方法来设置要显示的视图;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
|
3.在AndroidManifest.xml文件中配置该Activity;
<activity
android:name="类名"
android:icon="图标"
android:theme="activity的主题"
android:label="activity显示的标题" >
</activity>
|
4.启动该activity:
Intent intent = new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
|
5关闭该activity:finish(,直接关闭当前activity);
四.Activity间的数据交流
1.传递数据到新启动的Activity
传递一个数据:
前一个Activity:
Intent intent = new Intent(X.this,Y.class);
intent.putExtra("name","mkk");
startActivity(intent);
|
后一个Activity :
Intent intent = getIntent();
String name = intent.getStringExtra("name");
|
传递多个数据:
前一个Activity:
Intent intent = new Intent(X.this,Y.class);
Bundle bundle = new Bundle();
bundle.putString("name","mkk");
bundle.putInt("age",24);
intent.putExtra("message",bundle);
startActivity(intent);
|
后一个Activity:
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("message");
String name = bundle.getString("name");
int age = bundle.getInt("age");
|
除了上述的情况,还有的就是从第二个activity返回数据到第一个activity中。
第一个activity
使用流程:
//
Intent intent = new Intent(X.this, Y.class);
startActivityForResult(intent,
requestCode);
|
requestCode 请求码:
决定该方法是由哪个请求结果所触发的
resultCode 结果码:
决定数据来自哪个activity
先判断哪个activity传过来的数据,在进行数据解析。
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("message");
String name = bundle.getString("name");
int age = bundle.getInt("age");
setResult(
resultCode,intent);
|