您的位置:首页 > 移动开发 > Android开发

Android四大组件之Activity(一)

2012-09-18 22:18 507 查看
    写在最前, 从大四下学期(去年)开始接触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:

 

public class MainActivity extends Activity {


[code]/** Called when the activity is first created. */


@Override


public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.main);


}


}

[/code]

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

     onCreate()会在Activity被创建时调用,除此之外还有,onStart() , onResume(), onPause(), onStop(), onRestart(),onDestory() ,下面是Activity的生命周期图示:

 

                                                        





  上图中涉及到了另一个知识点,即Android进程优先级。

   Android系统会尽可能长的将应用程序的进程保存在内存中(进程缓存),但最终需要移除旧的进程为新的或更重要的进程提供内存资源。Android系统为每个进程计算优先级,以决定哪些进程被保留或被杀死。下面是Android系统进程优先级(优先级由高到低排列):

1、Foreground Process  :位于前台,和用户之间交互

2、Visible Process          :可见的,即没有被 [b]Foreground Process 完全遮住。[/b]

3、Services Process       :服务进程,如下载服务,或是访问网络等耗时的进程,Android给予较高的优先级

4、Background Process :运行于后台

5、Empty Process          :没有界面或者说没有view的Activty

      EmptyActivity的定义:


public class EmptyActivity extends Activity {


[code]


public void onCreate(Bundle icicle) {


super.onCreate(icicle);


}


 


}

[/code]


.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

  下面通过一个简单的例子,直观的看一下Activity的生命周期。

package com.zhai.demo;


[code] 


import android.app.Activity;


import android.os.Bundle;


import android.util.Log;


 


public class MainActivity extends Activity {


//用来跟踪Activity的执行过程


private int mCount = 0 ;




@Override


public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.main);


mCount++ ;


Log.d("activity_state", "onCreate(),mCount=" + mCount) ;


// The activity is being created.


}


 


@Override


protected void onDestroy() {


super.onDestroy();


mCount-- ;


Log.d("activity_state", "onDestroy(),mCount=" + mCount) ;


// The activity is about to be destroyed.


}


 


@Override


protected void onPause() {


mCount-- ;


Log.d("activity_state", "onPause(),mCount=" + mCount) ;


super.onPause();


// Another activity is taking focus (this activity is about to be "paused").


}


 


@Override


protected void onRestart() {


mCount++ ;


Log.d("activity_state", "onRestart(),mCount=" + mCount) ;


super.onRestart();


}


 


@Override


protected void onResume() {


mCount++ ;


Log.d("activity_state", "onResume(),mCount=" + mCount) ;


super.onResume();


// The activity has become visible (it is now "resumed").


}


 


@Override


protected void onStart() {


mCount++ ;


Log.d("activity_state", "onStart(),mCount=" + mCount) ;


super.onStart();


   // The activity is about to become visible.


}


 


@Override


protected void onStop() {


mCount-- ;


Log.d("activity_state", "onStop(),mCount=" + mCount) ;


super.onStop();


// The activity is no longer visible (it is now "stopped")


 


}


}

[/code]

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

这个例子中通过打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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: