Android 学习历程摘要(三)

1.proguard混淆:对与Activity等不应进行混淆,否则系统将找不到生命周期函数;JSON字符串要考虑混淆之后是否会影响字段名;native方法也不混淆,否则调用不到

2.ListView的onItemLongClickListener返回true时将不会再调用onItemClick

3.善用单例模式

4.分享会上所得:重要与紧急哪个优先处理,答案是优先处理重要的事情。处理事情的顺序应该是:重要又紧急,重要不紧急,紧急不重要,不紧急不重要。首先重要的事情一般都是正确的事情,而紧急去做的事情却不一定是正确的,其次重要有紧急的事情占的比例最小,不紧急不重要的事情最多,而如果我们选择先去处理紧急不重要的事情的话,那么之前重要不紧急的事情将会因为重要而变得紧急,那么我们就会陷入一个持续处理重要又紧急事件的循环中,这是一种非常不利的工作状态。

5.使用番茄来进行自我计划与训练

6.工程右键——Properties——Android,作为Library的项目要勾上is Library,要引入工程库的点击add(我的Eclipse存在问题,可能是自身配置原因,无法使用绝对路径的工程库,只能使用相对路径,之后查证下)

7.Application层位于最底层,系统层位于最高层,Application无法屏蔽Home键,而Dialog层比Application层等级高,所以可用一个透明的Dialog来实现屏蔽

8.当有莫名其妙的错误:如不可能的类型转换异常,已导包却报错等,尝试对工程进行clean或许可以解决

9.clampViewPositionVertical返回的是被拖动的子View的被拖动下一刻的位置,如果return 0 则拖动一下子View就会直接出现在最左侧

10.Automatic Target Mode: Unable to detect device compatibility. Please select a target device. 当其他项目都可以运行,但是有项目报这个错误时候,右键propertites选择Android,选择你手机系统版本,然后到清单文件中更改一下,再重新安装

11.

————————————————————————————Android 4高级编程学习摘要————————————————————————————————————

1.SharedPreferences中的apply方法是在API 9之后引入的,调用它会安全地异步写入SP Editor。因为它是异步的,所以是保存SP的首选方法。如果想要确保操作成功,或者想支持早期的Android版本,则可以调用commit方法,它会阻止调用线程,并在写入成功后返回true,在写入失败时返回false。

2.与标准UI布局不同,首选项定义在res/xml资源文件夹中

3.Android 3.0(API LEVEL 11)之前的Android平台不支持PreferenceHeader和Preference Fragment,在Preference Activity中直接添加PreferenceScreen       

4.如果Activity被销毁,然后被重新启动,以处理硬件配置改变(如屏幕方向改变)的情况,那么可以请求保留Fragment状态。通过再Fragment的onCreate处理程序内调用setRetainInstance,就指定了当与Fragment关联的Activity被重新创建时,Fragment的实例不应该被终止和重新启动。因此,当设备的配置改变,并且与被保留Fragment关联的Activity被销毁和重新创建时,被保留Fragment的onDestroy与onCreate处理程序不会被调用。如果将大部分对象创建代码移入onCreate,同时使用onCreateView和已保存实例值中存储的值来更新UI,这可以显著提高效率

5.如果应用程序需要外部文件资源,那么可以通过将其放置在项目层次结构的res/raw文件夹中,从而在自己的分发包中包含它们。若要访问,使用Resouce对象的openRawResouce方法,以便基于所指定的文件接收一个InputStream,传入文件名(不带扩展名)作为R.raw类的变量名。

6.大型的、先前已存在的数据源(如字典)不适合(甚至不可能)转换到Android数据库中,此时,向资源层次结构添加原始文件是一种非常好的解决方法。

7.如果应用程序需要缓存临时文件,Android提供了一个可管理的内部缓存和(API 8开始)一个不能管理的外部缓存。分别调用getCacheDir和getExternalCacheDir方法可以从当前的上下文中访问他们。

8.SQLite在列定义中使用了一种松散类型的方法。即并不要求一列中的所有值都是同一类型;相反,在每一行中分别设置每个值的类型。这样当从每一行的每一列中分配或者提取值时就不需要进行严格的类型检查了。

9.等到需要数据库时再创建和打开这些数据库是一种很好的做法。SQLiteOpenHelper会在成功打开数据库实例后缓存它们,所以你可以再刚好要执行查询或事务前请求打开数据库,出于相同的原因,除非不再需要使用数据库否则无需关闭。

10.由于数据库操作需要较长的时间才能完成,因此,为了确保这些操作不会影响用户体验,应该使所有数据库事务异步执行

11.如果磁盘空间不够或者没有足够的权限,对getWritableDatabase的调用可能失败,因此如有必要,在需要查询数据库时应该使用getReadableDatabase作为后备。在大多数情况下,它将提供与getWritableDatabase相同的、已缓存的可写数据库实例,除非该数据库实例还不存在,或者存在相同的权限或者磁盘空间问题,那么它将返回一个只读的数据库实例副本。

12.在创建或者升级数据库之前,必须以可写形式打开数据库,因此一般来说,最好的做法是首先尝试打开可写数据库,如果不能成功打开,就再去尝试打开只读数据库。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值