写在最前, 从大四下学期(去年)开始接触android,来到北京开始实习,再会学校完成毕业设计,又再次返回公司,正式入职,做android应用开发。这期间断断算起来已经差不多一年了。其实很早就想写博客了,因为写博客是一个提升自我技术水平的很有效方法,同时还可以锻炼自己的文笔,和别人分享自己的所学所想,偶尔得到一两句夸奖,便可以高兴很长时间,呵呵,这便是做技术人的单纯的快乐。 这次是下了很大的决心,希望能够将自己这近一年所学到的知识,进行一次系统的复习和提高,同时分享出来。虽然现在网上关于android的技术文章多如牛毛,但我还是会努力写一套有自己风格的android blog。好了,闲话就这么多,下面开始了,哈哈。
Activity, 是指一类用来呈现交互界面的android应用程序组件。例如,我们通过手机打电话,发短信或者拍照,此时与我们的手指发生交互的界面,实际上就是一个个Activity。每一个Activity系统都会给予一个Windows(窗口),用来绘制用户交互界面,这个窗口将填充到手机屏幕上。
一个应用程序一般会包括多个Ativity。通常,某个Activity会被设置为该应用程序的“main”(主)Activity,该Activity将作为该应用程序的入口并被用户首次看到。Activity之间是可以相互触发的,以便来执行不同的动作(用户操作)。
Activity的创建, Activity是Android四大组件之一,该类的定义在android源码的: android/app/ 下。创建自己的Activity需要继承系统的Activity,同时覆写相关方法。Activity有七个也其生命周期有关的方法,这七个方法掌握和控制着Activity的创建与销毁。下面是一个最简单的Activity:
1: public class MainActivity extends Activity {2: /** Called when the activity is first created. */3: @Override4: public void onCreate(Bundle savedInstanceState) {5: super.onCreate(savedInstanceState);6: setContentView(R.layout.main);7: }8: }onCreate()会在Activity被创建时调用,除此之外还有,onStart() , onResume(), onPause(), onStop(), onRestart(),onDestory() ,下面是Activity的生命周期图示:
上图中涉及到了另一个知识点,即Android进程优先级。
Android系统会尽可能长的将应用程序的进程保存在内存中(进程缓存),但最终需要移除旧的进程为新的或更重要的进程提供内存资源。Android系统为每个进程计算优先级,以决定哪些进程被保留或被杀死。下面是Android系统进程优先级(优先级由高到低排列):
1、Foreground Process :位于前台,和用户之间交互
2、Visible Process :可见的,即没有被 Foreground Process 完全遮住。
3、Services Process :服务进程,如下载服务,或是访问网络等耗时的进程,Android给予较高的优先级
4、Background Process :运行于后台
5、Empty Process :没有界面或者说没有view的Activty
EmptyActivity的定义:
1: public class EmptyActivity extends Activity {2:3: public void onCreate(Bundle icicle) {4: super.onCreate(icicle);5: }6:7: }
下面通过一个简单的例子,直观的看一下Activity的生命周期。
1: package com.zhai.demo;
2:
3: import android.app.Activity;
4: import android.os.Bundle;
5: import android.util.Log;
6:
7: public class MainActivity extends Activity {
8: //用来跟踪Activity的执行过程
9: private int mCount = 0 ;
10:
11: @Override
12: public void onCreate(Bundle savedInstanceState) {
13: super.onCreate(savedInstanceState);
14: setContentView(R.layout.main);
15: mCount++ ;
16: Log.d("activity_state", "onCreate(),mCount=" + mCount) ;
17: // The activity is being created.
18: }
19:
20: @Override
21: protected void onDestroy() {
22: super.onDestroy();
23: mCount-- ;
24: Log.d("activity_state", "onDestroy(),mCount=" + mCount) ;
25: // The activity is about to be destroyed.
26: }
27:
28: @Override
29: protected void onPause() {
30: mCount-- ;
31: Log.d("activity_state", "onPause(),mCount=" + mCount) ;
32: super.onPause();
33: // Another activity is taking focus (this activity is about to be "paused").
34: }
35:
36: @Override
37: protected void onRestart() {
38: mCount++ ;
39: Log.d("activity_state", "onRestart(),mCount=" + mCount) ;
40: super.onRestart();
41: }
42:
43: @Override
44: protected void onResume() {
45: mCount++ ;
46: Log.d("activity_state", "onResume(),mCount=" + mCount) ;
47: super.onResume();
48: // The activity has become visible (it is now "resumed").
49: }
50:
51: @Override
52: protected void onStart() {
53: mCount++ ;
54: Log.d("activity_state", "onStart(),mCount=" + mCount) ;
55: super.onStart();
56: // The activity is about to become visible.
57: }
58:
59: @Override
60: protected void onStop() {
61: mCount-- ;
62: Log.d("activity_state", "onStop(),mCount=" + mCount) ;
63: super.onStop();
64: // The activity is no longer visible (it is now "stopped")
65:
66: }
67: }
这个例子中通过打log的方式,来呈现相应场景下Acvtivity的状态,并引入了一个int型的计数器 mCount,来更加直观的显示各个函数的作用也他们之间的关系。
1. 启动应用程序:
相应的log信息为:可以清楚的看到,首次启动Activity时,依次调用onCreate(),onStart(),onResume(),
2.现在我们安返回键,看看会发生什么?
手机返回到了系统桌面,同时可以看到,依次执行了 onPause(),onStop(),onDestory(), 此时该应用程序退出,Activity已经被销毁。
3. 我们再次进入程序,并按“home”键,看看会发生什么?
创建的过程已然相同,但按“home”键时,程序并没有退出,而是由“foreground”转到“backgroud”。接下来我再次进入应用程序,看看该应用如何有被重新转到前台。
图中红线标记的,正是再次进入程序时,所发生的事情,应用程序依次调用了 onRestart(),onStart(),onResume().
以上的测试,我之前Activity的生命周期图,完全吻合。同时可以看出:[onCreate,onDestory], [onStart(),onStop],[onResume,onPause]也是一一对应的。
好了,就写到这吧,下篇会和大家分享一下Android用来管理Activity的方式——Task。