这周接触了下Android,终于大概搞懂怎么样用Android提供的组件实现一个简单的app了。一些笔记和心得如下:
【四大组件】
Activity、Service、ContentProvider、BroadcastReceiver
Activity | 最常见的组件,跟页面相关。一个app大多是多个Activity组成的。Activity之间的信息交流用Intent。 |
ContentProvider | 用于一个机子上的不同的app之间的数据交换。类似于一个服务对外提供的供外部访问的接口,其中有uri的概念。即便这个提供服务接口的app没有启动,别的app也可以增删改查其中的数据。ContentProvider以某种uri的形式提供数据,其他app用ContentResolver根据Uri去访问操作指定数据。ContentResolver还可以通过向ContentProvider注册ContentObserver达到接收数据变化的通知。 |
Service | 非常类似于Activity。如果需要界面或者需要与用户交互,那么使用Activity否则用Service做一些后台的,消耗时间长的操作。但普通的Service不会创建新的线程来做这些操作。但作为一种特殊的Service,IntentService 会创建单独的线程用于处理耗时较多的任务。 AIDL Service通过AIDL接口定义了不同进程间的通信接口,因此客户端和服务端都需要引入这样的依赖(java RMI、或者HSF等类似于此) |
BroadcastReceiver | 全局的监听器。其他的监听器只能依赖于原先的进程,当原先的进程退出后监听器也消失了。但是全局的监听器有它自己的进程,只要存在与之相匹配的intent被广播出来,BroadcastReveiver总会被激发。 |
【其他组件】
Intent | 用于在同一个app中的不同的activity中进行数据的交换。 |
Message/Looper /Handler | Handler在新启动的线程里面发送Message,一般在主线程里面获取处理消息。消息被存放在MessageQueue里面,由Looper构造器构造MessageQueue。每个线程只能拥有一个MessageQueue。如果主线程不是主UI线程,那么需要自己手动创建一个Looper对象。Looper中的loop方法会不断地轮询MessageQueue取出消息。如果创建handler的Activity被finish后,Handlerd的线程也被停止和收回。 |
ANR异常 | Android No Response,在主线程里执行需要消耗大量时间的操作会造成Android应用程序无法响应输入事件和Broadcast。 |
AsyncTask< Params, Progress, Result> 【泛型】 | 用于异步执行工作。在UI线程中创建AsyncTask的实例并且调用其execute方法。方法里面的doInbackgroud(Params):result;onPostExecute(Result):void; onPreExecute() :void; onProgressUpdate(Progress):void 需要自己重写。在doInBackgroun中需要自己调用publishProgress(Progress):void 触发OnProgressUpdate。 |
Toast | 一种简单的消息提示框。提示信息不会获得焦点,过一段时间会自动消失(调用makeText生成一个Toast对象,设置好属性如持续时间后,调用show() 方法展现) |
【MVC】
在最重要的AndroidManifest.xml中需要注册所有用到的四大组件。
通过对xml文件的配置来定义各个Activity中界面的布局、包含的元素(如TextView、Button等等)
在程序中也可以修改这些元素的相关属性,如设置Button按钮上的文字等。
【监听和回调】
类似于js的方式实现界面上动作触发的逻辑,比如按钮被按下触发那种动作。这是一个界面程序必须要实现的。
【入门难度】
相对来说还是比较简单的,Java基础加上一些页面设计的基本知识就可以完成一个简单的demo APP。当然只是很粗糙功能很弱的那种。要想做得好,除了知道andriod的基本知识外,也需要专门的domain知识,最好还有UI方面的才能。最重要的是上手!当然有个同事或者朋友在你身边帮你解决一些刚开始容易漏掉或者没有意识到的小问题就更好了!网上有很多demo的源码可以看看或者跟着实现一下,删删改改调调,很快就能明白个所以啦。
-----------------------------------------------------------
加油!保持新鲜感!用代码实现自己的想法!
-----------------------------------------------------------