《android开发指南中文版》阅读笔记

感谢http://blog.csdn.net/iefreer的翻译~

Application Fundamentals

1、(资源编译器)aapt工具将编译后的Java代码和其他所需数据、资源文件一起打包成.apk文件,一个.apk文件包含的代码被看做是一个应用程序。

2、每个Android应用程序都存在于自己的世界中:自己的进程、自己的虚拟机、自己的Linux用户id、自己的文件。

3、为了使应用程序可以使用其他应用程序的某个功能(android的核心特点之一),系统必须在某个应用程序的某部分被需要时启动它,并将那个特定部分代码实例化。所以android应用程序没有单一的程序入口,即没有main(),而是提供了四种基本组件:Activity、Service、Broadcast Receiver、Content Provider。

4、Activity是为用户操作而展示的可视化用户界面。

5、每个Activity都被给予一个默认的窗口进行绘制,窗口显示的可视内容由一系列的视图构成,这些视图都继承自View基类。

6、视图层次是由Activity.SetContentView()放入activity窗口之中的。

7、Service没有可视化界面,而是在一段时间内在后台运行。它同样运行在程序的主进程中,不会干扰其他应用程序,通常会派生一个新线程来进行一些耗时的任务。

8、Broadcast Receiver是一个专注于接受广播信息,并作出相应处理的组件。广播消息一般来自系统,如电量低等,也可来自应用程序。

9、Content Provider将一些特定的应用程序数据提供给其他应用程序使用,Content Resolver。

10、Content Provider被Content Resolver发出的请求激活,而Activity、Service和Broadcast Receiver被Intent激活。

11、载入一个Activity或者指定一个新的工作给一个Activity,可通过传递一个Intent到Context.startActivity()或Activity.startActivityForResult()。使用startActivityForResult,被调用的Activity会返回一个结果给发出调用的Activity,结果被封装在一个Intent里,传递给发出调用的Activity的onActivityResult()方法。

12、传递Intent给Context.startService()和Context.bindService()可以启动或绑定Service。

13、应用程序可以凭借将Intent对象传递给 Context.sendBroadcast() ,Context.sendOrderedBroadcast(), 以及Context.sendStickyBroadcast()和其它类似方法来产生一个广播。

14、关闭activity用finish()、stopActivity(),关闭service用stopSelf()、Context.stopService()。

15、当系统启动一个应用程序组件之前,必须先知道这个组件是存在的,所以需要一个声明组件的文件,就是AndroidManifest.xml,它的主要功能是申明组件,同时指明应用程序需要链接的库和期望得到的权限。

16、Broadcast Receiver既可以在AndroidManifest.xml中声明,也可以在代码中动态生成,并通过Context.registerReceiver()的方式注册到系统。

17、组件可以拥有任意数量的Intent过滤器,每一个都会声明不同的能力。如果它没有任何Intent过滤器,则它只能被显示地声明了目标组件名称的intent激活。就是别人叫它名字,它才能激活~

18、任务是用户体验到的“应用程序”,它是安排在一个堆栈中的一组相关的应用程序。

19、堆栈会为每一个示例单独开辟一个入口?

20、当用户离开一个任务后,必须能通过一定的方式返回它。所以“singleTask”和“singleInstence”的加载模式只能用于指定了action为MAIN和LAUNCH过滤器的activity,即应用程序的入口activity,这样才能通过应用程序加载器中该activity的图标重新回到该任务。

21、在manifest文件中可以通过<process>来指定组件运行在哪个进程。

22、activity生命周期:完整生命周期——onCreate()、onDestroy();可视生命周期——onStart()、onRestart()、onStop();前台生命周期——onResume()、onPause()。

23、onPause()是唯一一个在进程被杀死前一定会调用的方法,onStop()和onDestroy()都有可能不被调用,所以应该利用onPause()方法来将所有持久性数据保存到存储中,如用户输入的数据。

24、activity即使是被系统杀死,用户也希望回到这个activity时能保持其先前的状态。系统在杀死activity之前会调用onSaveInstanceState()方法,你应该实现它来保存一些临时状态数据,而由于必须是系统因内存不足而杀死activity时才会调用onSaveInstanceState(),若为用户操作则不调用,所以持久性数据应该在onPause()中保存。

25、Service生命周期:

26、Broadcast Receiver生命周期:只有一个回调方法onReceive(),该方法返回后,失活。若响应一个广播消息需要一段时间,为避免被系统杀死,应在onReceive()中启动一个Serveice而不是单单启动一个线程。

27、进程重要性层次(递减):前台进程、可视进程、服务进程、背景进程、空进程。

28、为了避免进程被系统杀死,以启动一个Service的方式启动一个长时间运行过程比简单的衍生一个线程来进行处理要好。使用服务,不论activity发生何事,都至少可以保证操作拥有服务进程的权限。


User Interface 用户界面

1、View类——Widgets;ViewGroup——Layout。

2、定义和展现视图层次可以用布局文件定义,也可以用代码(addView(View))实现。

3、想要获得用户界面的事件通知,需要定义一个事件侦听器并注册至视图,或者为视图覆写一个现有的回调方法(构建自定义组件时)。

4、创建菜单不用自己定义该框架,只要在activity中定义onCreateOptionMenu()和onCreateContextMenu(),并声明你想要包含的菜单项目。也不用自己注册事件侦听器,当菜单项目被选中时,框架会自动调用onOptionItemSelected()或onContextItemSelected()。

5、Adapter和AdapterView,将外部数据绑定到视图。

6、风格应用于单个元素,主题应用于所有activity或单个activity。


Resources and Assets 资源和资产

1、仅在需要读取原始字节流时才需要保存数据为资产。

2、放在资源目录(res/)下的文件会被Android编译,可以使用应用程序中的R类访问。而放在资产目录(assets/)下的文件会保持原始的文件格式,要使用它们,你必须用AssetManager来以字节流的形式读取文件。

3、放在res/drawable/目录下的图像有可能会被appt自动优化,若想读取图像的位流并转换成一个bitmap,则应把图像放在res/raw/目录下,以免被自动优化。res/raw/目录下的文件直接拷贝到设备,不编译。

4、Android中包含了很多标准资源,要使用它们必须用android进行限定:android.R.drawable.button_background

5、不要将资源的引用(id)与资源相混淆,可以通过Resources.getText/getDrawable/getXml(id)来将资源的引用转化成相应的资源。

6、使用@前缀对资源进行引用,格式:@[package:]type/name;对系统资源引用:@android:type/name。

7、@这种技巧还可以用来创建资源之间的引用,如创建新的drawable资源作为已存在资源的别名。

8、使用?前缀可以对当前主题的属性值进行引用:?[namespace:]type/name(type可以不显示地声明);如?android:textDisabledColor。

9、为适应不同的硬件设备,若需要可替换的资源,在资源目录中建立不同的文件夹,并在其文件名后添加限定符。





你可能感兴趣的:(Android开发)