Android基础知识总结

安卓组件

安卓组件是安卓应用程序最基本的组成单元。每种组件都可以作为系统进入安卓程序的入口。

安卓组件共有四种,四种安卓组件特点迥异,并具有不同的生命周期特点。

这四种安卓组件是:

活动(Activities)

一个activity表示了一个和用户交互的界面。例如,某个email应用程序可能存在如下几种不同的活动:

  • 显示未读邮件列表
  • 编辑邮件
  • 读取某封邮件

这些不同的activity组合起来形成了一个统一的整体,但实际上它们是相互独立而存在的。因此,其他的应用程序可以独立调用其中的某一种activity。例如,一个主要功能是拍照的应用程序可以通过调用“编辑邮件”的活动来让用户分享拍摄的照片。

自定义的activity应是Activity的子类。阅读Activities开发向导了解更多关于activity的内容。

服务(Services)

service是后台运行的组件。它的主要职能是执行一些长时间运行的操作执行序列,或与远程服务器进程进行交互。servive不提供用户接口。例如某应用程序的service可能在用户浏览其他应用程序时后台播放音乐,或者在不阻塞与用户交互的activity的前提下通过网络获取数据。service可以被其他的组件(比如activity)启动或者运行。其他组件也可以与某个service绑定来与该service进行交互。

自定义的service应是Service的子类。阅读Activities开发向导了解更多关于service的内容。

内容提供者(Content providers)

content provider用来管理一组共享的应用程序数据。开发者可以在文件系统、数据库、网络或任何应用程序可以访问的持久化存储层存储数据。其他的应用程序可以通过content provider查询甚至是修改某个应用程序的数据。例如,安卓操作系统提供了一个content provider来管理用户的联系人信息。因此,某个拥有权限的应用程序可以通过该content provider来读取或写入某个特定的联系人的信息。

content provider还可以被应用程序用来读取那些对其他应用程序保密的、不被共享的数据。例如,Note Pad通过使用content provider来保存记录。

开发者自定义的content provider必须作为ContentProvider的子类,并且,需要实现一组标准API使其他应用程序可以启动交互事务。阅读Content Providers开发向导了解更多内容。

广播接收器(Broadcast receivers)

broadcast receiver是一个用于相应系统广播消息的组件。许多广播消息是由系统产生的,例如关闭了屏幕、电池电量不足或者是完成了屏幕截图。应用程序也可以产生广播消息,例如让其他应用程序获知本应用程序下载一些可供使用的数据。广播接收器不产生用户接口,但是它们可以使用状态栏通知来提示用户。广播接收器应该尽可能少的处理事务。例如,它可以通过启动一个服务来执行某些任务,而不是广播接收器本身执行任务。

开发者自定义的broadcast receiver应该作为BroadcastReceiver的子类。每个broadcast都应是一个Indent对象。阅读BroadcastReceiver来了解更多信息。

安卓系统的一个特性是任何app都可以启动其它app的组件。例如你想让通过照相设备来拍摄一张图片。如果有某个应用程序已经实现了这个功能,你可以直接使用,而不需要自己开发一个采集图像的activity。你可以直接使用照相app的activity来采集图像,然后使用采集好的图像数据。用户会觉得照相的功能是你的app的功能之一。

生命周期(lifecycle)

Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。 为了解决这个问题, Android 引入了一个新的机制——生命周期(Life Cycle)。

Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是一个Activity 的onCreate 方法),都会产生一个进程(Process)。当系统内存即将不足的时候,会依照优先级自动进行进程(process)的回收。不管是使用者或开发者, 都无法确定的应用程序何时会被回收。所以为了很好的防止数据丢失和其他问题,了解生命周期很重要。

活动的生命周期图:

activity lifecycle

activity生命周期可以分为4种状态、7个方法。

4种状态

  • 活动(Active/Running)状态

  • 暂停(Paused)状态

  • 停止(Stopped)状态

  • 非活动(dead)状态

当Activity运行在屏幕前台(处于当前任务活动栈的最上面),此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只会有一个Activity 处于活动(Active)或运行(Running)状态。

当Activity失去焦点但仍对用户可见(如在它之上有另一个透明的Activity或Toast、AlertDialog等弹出窗口时)它处于暂停状态。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉。

完全被另一个Activity遮挡时处于停止状态,它仍然保留着所有的状态和成员信息。只是对用户不可见,当其他地方需要内存时它往往被系统杀掉。

Activity 尚未被启动、已经被手动终止,或已经被系统回收时处于非活动的状态。

7个重要方法

  • OnCreate(): Called when the activity is first created. This is where you should do all of your normal static set up — create views, bind data to lists, and so on. This method is passed a Bundle object containing the activity’s previous state, if that state was captured (see Saving Activity State, later). Always followed by onStart().

  • onRestart(): Called after the activity has been stopped, just prior to it being started again. Always followed by onStart().

  • Onstart(): Called just before the activity becomes visible to the user. Followed by onResume() if the activity comes to the foreground, or onStop() if it becomes hidden.

  • OnResume: Called just before the activity starts interacting with the user. At this point the activity is at the top of the activity stack, with user input going to it. Always followed by onPause().

  • OnPause: Called when the system is about to start resuming another activity. This method is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, and so on. It should do whatever it does very quickly, because the next activity will not be resumed until it returns. Followed either by onResume() if the activity returns back to the front, or by onStop() if it becomes invisible to the user.

  • onStop: Called when the activity is no longer visible to the user. This may happen because it is being destroyed, or because another activity (either an existing one or a new one) has been resumed and is covering it. Followed either by onRestart() if the activity is coming back to interact with the user, or by onDestroy() if this activity is going away.

  • onDestroy: Called before the activity is destroyed. This is the final call that the activity will receive. It could be called either because the activity is finishing (someone called finish() on it), or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with the isFinishing() method.

##参考资料

  1. Application Fundamentals
  2. Android四大基本组件介绍与生命周期
写于2015年09月12日