概要

布局:
RelativeLayout:
<RelativeLayout>
<TextView

 android:id="@+id/text"
 android:layout_width="wrap_content"
 android:layout_weight="wrap_content"
 android:layout_alignBaseline="@+id/btn"//指定某一组件与之对其
 android:text="text:"/>
<Button
 android:id="@+id/btn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@id/text"
 android:text="button"/>
</RelativeLayout>

TableLayout常用属性:
android:collapseColumns:隐藏指定的列
android:shrinkColumns:收缩指定的列以适合屏幕,不会挤出屏幕:超出自动换行
android:stretchColumns:尽量把指定的列填充空白部分
android:layout_column:控件在TableRow中所处的列:把控件放入指定的列中
android:layout_span:该控件所跨越的列数:把几列合成一列

 

什么是Bound Services:
Bound service允许其它的组件(比如Activities)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的通话,Bound

service仅仅在
服务于其它组件时存在,不能独自无限期的在后台运行.
创建Bound Services:
单创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互,在Android中有三种方式定

义方式:
1.扩展Binder类
2.使用Messenger
3.使用AIDL(Android Interface Definition Lanager)
通过扩展Binder类创建BoundServices:
步骤:
a.在Service类中,创建一个Binder实例
 包含客户端能调用的公共方法
 返回当前服务对象
b.在onBind()方法中返回Binder实例
c.在客户端,从onServiceConnected()方法中获得Binder实例,

FrameLayout:
所有添加到这个布局中的视图都以层叠的方式显示,第一个添加的组件放到最底层,最后添加到框架中的视图显示在最上面,上一层的会覆

盖下一层的控件

RelativeLayout:
相对布局,在容器内部的子元素可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位,注意:不能再RelativeLayout容器本身

和他的子元素之间产生循环依赖,比如说:不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为

ALIGN_PARENT_BOTTOM
android:layout_above:将该控件位于给定ID的控件之上
android:layout_below:将该控件的位于给定ID控件之下
android:layout_toLeftOf:将该控件置于给定ID的控件之左
android:layout_toRightOf:将该控件置于给定ID的控件之右.
android:layout_alignBaseLine:该控件基线对其给定ID的基线
android:layout_alignBottom:该控件给予给定ID的控件底部对其
android:layout_alignLeft:该控件于给定ID的控件左对齐
android:layout_alignRight:该控件于给定ID的控件右对齐
android:layout_alignTop:该控件于给定ID的控件顶对齐
android:layout_alignParentLeft:如果为True,该控件位于父控件的左部
android:layout_alignParentRight:如果为True,该控件位于父控件的右部
android:layout_alignParentTop:如果为True,该控件位于父控件的顶部
android:layout_alignParentBottom:如果为True,该控件位于父控件的底部
android:layout_centerHorizontal:如果为True,该控件将被置于水平方向的中央
android:layout_centerInParent:如为True,该控件将被置于父控件水平方向和垂直方向
android:layout_centerVertical:如果为True,该控件将被置于垂直方向的中央

 

什么是RelativeLayout?
RelativeLayout顾名思义,相对布局,在这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位:
注意:不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候

将子元素的高设置成为ALIGN_PARENT_BOTTOM
与RelativeLayout相关的布局属性:

android:gravity="top|center" : 主要表示当前容器的内容的显示位置,如声明当前布局所需要显示的文字位置
android:layout_above: 将该控件置于给定ID的控件之上
android:layout_below: 将该控件的置于给定ID控件之下
android:layout_toLeftOf: 将该控件置于给定ID的控件之左
android:layout_toRightOf: 将该控件置于给定ID的控件之右
与RelativeLayout相关的布局属性:
android:layout_alignBaseLine: 该控件基线对齐给定ID的基线
android:layout_alignBottom: 该控件于给定ID的控件底部对齐
android:layout_alignLeft: 该控件于给定ID的控件左对齐
android:layout_alignRight: 该控件于给定ID的控件右对齐
android:layout_alignTop: 该控件给定ID的控件顶对齐

android:layout_alignParentLedt: 如果为True,该控件位于父控件的左部
android:layout_alignParentRight: 如果为True,该控件位于父控件的右部
android:layout_alignParentTop: 如果为True,该控件位于父控件的顶部
android:layout_alignParentBottom: 如果为True,该控件位于父控件的底部 

android:layout_centerHorizontal: 如果为True,该控件将被置于水平方向的中央
android:layout_centerInParent: 如为True,该控件将被置于父控件水平方向和垂直方向
android:layout_centerVertical: 如果为True,该控件将被置于垂直方向的中央

 

Service和Thread的使用:
单需要交互时需要使用Thread,如果不需要交互时就直接使用SERVICE即可
如在播放音乐时,在当前Activity可见时播放,而在其不可见时就需要停止的话就是用Thread
是用Service的方式:
Started:
 startService():调用者和服务者之间没有联系,即使调用者退出了,服务仍然进行[onCreate()->onStart()(为过时:使用

onStartCommand()来代替)->startService()->onDestory()]
Bound:
 bindService():调用者和服务绑在一起,调用者一旦退出服务也就终止[onCreate()->onBind()->onUnbind()->onDestory()]
通过startService()使用Service:
编写类继承Service或其子类
复写方法:onStartCommand() onBind() onCreate() onDestory()
在manifest文件中什么服务:<service android:name=".Service"/>
启动服务:
关闭服务:
三个常量:
START_STICKY:当服务正在运行时被杀死,系统将会把它的值设为started状态,但是并不保存其传递的Intent对象
START_NOT_STICKY:当服务正在运行时被杀死,并且没有新的Intent对象传递过来,系统将会把它的值设为started状态,但是并不会再次创

建进程,直到startService(Intent)方法被调用.
START_REDELIVER_INTENT:当服务正在运行时被杀死,它将会间隔一段时间后重新被创建,并且最后一个传递的Intent对象将会再次传递过

来.

创建BoundService:
当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互,在Android中有有三种方式

定义:
1.扩展Binder类
2.使用Messager
3.使用AIDL(Android Interface Definition Lanager)
重点:使用IntentService:
IntentService是Service类得子类,用来处理异步请求,客户端通过startService(Intent)方法传递请求给IntentService,IntentService

通过worker thread处理每个Intent对象,执行完成所有工作后自动停止Service.
写构造方法
复写onHandleIntent()方法

IntentService执行如下操作:
创建一个与应用程序主线程分开的worker thread用来处理所有通过传递过来的Intent请求
创建一个work queue,一次只传递一个intent到onHandleIntent()方法中,从而不用担心多线程带来的问题
当处理完所有请求后自动停止服务,而不需要我们自己调用stopSelf()方法
默认实现了onBind()方法,返回值为null
默认实现了onStartCommand()方法,这个方法将会把我们的intent放到work queue中,然后再onHandleIntent()中执行.
解决问题:耗时的工作:=>Service是与主线程在同一个线程中运行的,所以需要在主线程NEW一个Thread()开启新的线程来操作,这样写得代

码比较多,所以在ANDROID中提供了一种异步处理线程的机制:使用IntentService来实现异步线程处理机制解决了新NEW线程带来的复杂代

码的编辑

消息处理详解:
MessageQueue:消息队列,存放消息的地方,按照FIFO规则执行,每一个线程只可以拥有一个MessageQueue,在创建Looper对象会创建一个

MessageQueue对象.
Message: 消息对象,MessageQueue中存放的对象,一个MessageQueue中可以包含多个Message对象,可以通过Message.obtain()或者

Handler.obtainMessage()获取Message对象,但是这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存

在则直接取出返回这个实例,如果消息池中没有可用的Message实例,则采用给定的参数创建一个Message对象,调用removeMessages()时,将

Message从MessageQueue中删除,同事存入到消息池中.
Looper:操作MessageQueue,一个Looper对应一个MessageQueue,通过调用Looper.myLooper()可以获得当前线程的Looper对象,Looper从

MessageQueue中取出Message然后,交由Handler的handlerMessage()进行处理,处理完成后,调用Message.recycle()将其放入消息池中.
Handler:消息的处理者,handler负责将需要传递的信息封装成Message对象,然后调用sendMessage()方法将消息存入MessageQueue中,当

MesageQueue循环到该Message,调用相应的handler对象的handlerMessage()方法对其进行处理,Handler都可以共享同一Looper和

MessageQueue.

Status Bar Notifications:
status bar notification添加一个icon到系统的状态栏中(可选择是否有文本信息),添加一段信息到"Notifications"窗口中. 
当在后台运行的服务需要与用户进行交互时我们可以使用status bar notification
创建Notification:
Notification
NotificationManager

 

 

 

posted @ 2011-05-15 19:44  移动应用开发  阅读(150)  评论(0编辑  收藏  举报