安卓工作开发笔记

1.

当ListView点击事件没有反应时,要在子选项item的根布局中设置属性android:descendantFocusability="blocksDescendants"。


2.

android不于许子线程中有对界面进行操作的行为,应在主线程或Handler或AsyncTask的onPostExecute方法中进行。


3.

在安卓SDK4.0之后的版板,不于许在主线程中进行Http通信。


4.

在xml中控件的设置单击属性android:onClick="pwdBtn",然后再在代码中写一个public void pwdBtn(View v)方法,作用与实现View.OnClickListener接口一样。


5.

使用标签<requestFocus />让某控件优先获得焦点,用法在控件内使用,如:

<Button android:layout_width="fill_parent"

        android:layout_height="fill_parent" >

<requestFocus>

</Button>


6.

使用<ScrollView>技巧,把所需滚动部分的界面,用<LinearLayout>包含着,然后再用<ScrollView>把<LinearLayout>包住,因为<ScrollView>只能包含一个目标。


7.

使用<Spinner>下拉框的单击事件OnItemSelectedListener时,注意,当代码运行到绑定鉴听时,会默认调用一次,而不是只有单击才会调用。然后当切换下拉的选项时,才会再调用。


8.

拉界面时,最好只使线性布局、相对布局和表格布局(不要使用绝对布局),字体大小单位用sp,其他大小用dp。常使用android:layout_marginXXX=“20dp”,对控件自身与旁边其他控件的位置距离进行设置。其中XXX表示可上,下,左,右等选择。



9.使用线性和相对布局时,当水平方向上数个控件时,要注意要设置好布局内长度不确定且其后面有别的控件存在的控件的最大宽度。比如线性布局:当某一个控件内容过长时,会把另一控件给挤出去屏幕外;相对布局:由于是在相对布局内,所以当控件因控件内容过长导致该控件“解碰”到了另一个控件,此时若宽度设为:wrap_content,它是不会自动换行的,且超出的那一部分会和另一控件的内容重叠。


10.

activity的4种启动模式:




standard


默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。


例如:

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……

点back键会依照栈顺序依次退出。




singleTop


可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。


例如:

若我有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。


若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)

若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。





singleTask


只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。


例如:

若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。

但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。


操作:C1->C2 C1->C2->C3 C1->C2->C3->C2 C1->C2->C3->C2->C3->C1 C1->C2->C3->C2->C3->C1-C2

实际:C1->C2 C1->C2->C3 C1->C2 C1->C2->C3->C1 C1->C2


若是别的应用程序打开C2,则会新启一个task。

如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskIdI不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。

注意:如果此时你点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。





singleInstance


只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。


例如:

程序有三个ActivityD1,D2,D3,三个Activity可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。


若是在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么如果这时再从D2启动D1或者D3,则又会再创建一个task,因此,若操作步骤为other->D2->D1,这过程就涉及到了3个task了。


11.当Thread无法传递数据给Handle时,可能是UI主线程堵塞住了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值