进行对Android应用程序全解析

移动开发 Android
Android应用程序作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且完美的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。

Android应用程序里提供的Eclipse插件使得运行我们的程序非常简单。选择Run > Open Run Dialog菜单;你会看到一个对话框,在这个对话框中就像配置J2ME运行环境一下,配置一个Luncher。

大功告成!点击run按钮,Androi模拟器将运行。当模拟器启动完成你将看到你的程序。到这里我们就完成了!按照正常思路,一定会想,程序入口点在哪里呢?为什么会从这个Activity 启动呢?

现在用我们自己的最容易理解的方式来表述:这是因为当启动这个程序的映像文件时,会发送一个事件对象Intent, 带有MAIN的行为属性,而自动生成的代码及文件, 有一个AndroidManifest.xml会为HelloWorld这个Activity 配置一个事件过滤器,表明实现了MAIN action,LAUNCHER category的入口点行为。请注意其中的几行:

  1. @Override  
  2.  public void onCreate(Bundle icicle) {  
  3.      super.onCreate(icicle);  
  4.      TextView tv = new TextView(this);  
  5.      tv.setText("Hello, Android");  
  6.      setContentView(tv);  
  7.  }  
  8.  

在多数情况下, 每个Android应用程序运行在自己的Linux进程中. 当一个应用的某段code需要运行的时候这个进程将会被创建, 直到不再需要该应用或系统要为其他的应用释放内存的时候才停止.

一个非常重要且少有的特性是, 应用进程的存活时间不是由这个应用直接控制的. 而是由系统决定的, 系统会根据每个已知的正在运行的应用情况来定夺, 包括, 该应用对用户的重要性和系统全部可用内存.

对于开发人员来讲, 了解每个应用组件(尤其是, Activity, Service, 和IntentReceiver)对于应用进程存活时间的影响是非常重要的. 如果没有正确使用, 可能会导致应用进程在处理重要工作的时候被系统杀掉.

在对应用进程生命周期的理解中, 一个典型的错误就是当一个IntentReceiver 接收到Intent 之后, 会在自己的onReceiveIntent()方法中开起一个线程。而后return这个方法. 一旦这个方法return, 系统会认为这个IntentReceiver 不在处于活跃状态, 也就认为他的宿主进程不再需要(除非还包有其他活跃的应用组件)。

以至于当系统需要回收内存的时候会随时释kill掉这个进程, 中止其中的子线程. 解决这个问题的办法是在IntentReceiver中启动一个Service, 这样系统会知道在这个进程中还有活跃的任务需要完成. 为了决定在内存较低的时候杀掉哪个进程, Android应用程序会根据运行在这些进程内的组件及他们的状态把进程划分成一个"重要程度层次". 其重要的程度按以下规则排序:

前端进程可以是一个持有运行在屏幕最前端并与用户交互的Activity的进程(onResume方法被调用时),也可以是持有一个正在运行的IntentReceiver(也就是说他正在执行自己的onReceiveIntent方法)的进程。

在系统中, 只会有少数这样的进程, 并且除非内存已经低到不够这些进程运行, 否则系统不会主动杀掉这些进程. 这时, 设备通常已经达到了需要内存整理的状态, 所以杀掉这些进程是为了不让用户界面停止响应。

责任编辑:chenqingxiang 来源: ifanr.com
相关推荐

2010-02-06 15:26:11

Android应用程序

2010-03-03 14:51:02

Android手机

2010-03-04 16:38:37

Android开发技巧

2010-02-22 15:49:35

Python应用程序

2010-02-22 14:54:47

Python应用程序

2010-03-02 14:24:00

Android应用程序

2010-03-01 14:28:46

Python进程

2010-02-22 10:18:29

Python代码

2010-02-06 10:14:36

Android Act

2011-06-13 09:38:00

BingiPhoneApp Store

2011-08-22 09:59:16

2010-02-06 17:17:17

Android手机

2010-02-05 14:54:56

Android UI

2011-06-09 09:12:12

QT symbian

2010-02-05 15:22:14

2010-03-03 13:43:46

Android手机系统

2010-02-23 15:29:43

Python 编辑器

2011-09-01 10:01:35

PhoneGap应用程序GoodDay

2009-12-21 15:48:29

WCF应用程序

2010-02-26 09:55:22

Python应用程序
点赞
收藏

51CTO技术栈公众号