上一周开始研究android launcher的源码,为了巩固学习成果,现在开始边学习边自己设计一个launcher。
今天发布第一个版本,这个版本比较简单,实现了如下功能:
1、显示app列表和home键;
2、显示并且换壁纸
3、添加widget。
具体实现可以参看《android Launcher基础知识》
不过虽然这些功能都是实现了,但是显示并且切换壁纸功能是放在不同的activity中实现的。app页面截图如下:
源码下载地址为:http://download.csdn.net/detail/xianming01/4397803
在ARC项目中, 是可以指定哪一些class不使用ARC的, 具体操作步骤如下:
(以ARC项目中使用ASIHTTPRequest为例)
1、点击项目 - Build Phases - Compile Sources中, 选择不使用ARC的class,双击class文件, 编辑Compiler Flags加入
-fno-objc-arc
2、添加ASIHttpRequest需要的framework:
- SystemConfiguration.framework
- MobileCoreServices.framework
- CoreGraphics.framework
- libz.dylib
- CFNetwork.formework
在Android开发过程中,使用了大量的ListView,发现这个错误偶尔会出现。特别是做压力测试的时候,不停的点击刷新,更容易出现这个错误。代码中已经使用了Adapter的notifyDataSetChanged()方法通知UI更新了,但是还是会出现这个错误。究其根本原因,还是线程之间同步的问题。比如,线程1更新了Adapter中的内容,却还没有来得及通知内容已经更新,就又有线程2更新了Adapter中的内容,这个时候如果线程1再通知内容更新,就会出现上述异常了。
在此提出一些解决办法:
对线程进行管理,如果当前Actitivty暂停了,及时停止这些线程。
数据更新后,要及时使用notifyDataSetChanged()方法通知UI,避免出现数据不一致的情况。
数据的更新,最好放在主线程中进行。这样可以使用同步数据更新与通知内容更新部分的代码。
示例代码: