博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android四大组件之Activity(一)
阅读量:4957 次
发布时间:2019-06-12

本文共 4546 字,大约阅读时间需要 15 分钟。

    写在最前, 从大四下学期(去年)开始接触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:      @Override
4:      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。

转载于:https://www.cnblogs.com/zsmiling/archive/2012/09/18/2691697.html

你可能感兴趣的文章
如何组建和管理测试团队
查看>>
理论相关概念原理
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
两个周末,两个湖
查看>>
开发环境搭建
查看>>
入门GTD时间管理系统必读
查看>>
Codeforces Round #367 (Div. 2) Vasiliy's Multiset 异或字典树带删除模板
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
随笔 javascript-抽象工厂模式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
Android项目的目录结构
查看>>
spring-cloud服务器雪崩效应
查看>>
C++中“引用”的底层实现
查看>>
ZOJ 1602. Multiplication Puzzle (DP)
查看>>
Spring Cloud分布式微服务云架构集成项目
查看>>
【Android学习专题】控件组件篇:Dialog汇总
查看>>
Dynamic Signals and Slots
查看>>
jquery datatable 参数
查看>>