android笔记之碎碎念

1.主线程又被成为UI线程,只有在主线程中才能刷新UI

主线程有一个消息队列、消息轮询器和消息处理器,消息处理器需要开发人员自己编写,在子线程需要调用UI时就往消息队列添加消息,主线程的轮询器就会查询消息队列,并调用消息处理器处理消息

当子线程获取网络资源时,主线程还会继续执行,这时子线程也许还没有获得所请求的资源,这时主线程如果需要用到子线程的所获得的资源,就有可能得不到,报空指针错误。
所以在子线程中要向主线程发送消息,并在主线程的消息处理函数中执行用到子线程资源的那段主线程的代码。

2.Listview的每个条目都是一个View
getView(int position, View convertView, ViewGroup parent)
Position:Listview调用的条目在整个条目的位置就是position的值。
convertView:缓存的条目。
ViewGroup :父元素,是View的子类,有五种布局类型,ViewGroup 可以有子元素,而View没有。

3.让系统的环境不再去敏感横竖屏的切换。 android:configChanges=”orientation|screenSize|keyboardHidden”
横竖屏写死
android:screenOrientation=”landscape”
android:screenOrientation=”portrait”

4.Eclipse启动时出现下列错误:reg.eclipse.core.resources”
Problems occurred when invoking code from plug-in: “org.eclipse.core.resources”
解决方案是:给工作空间改个名

5.
android笔记之碎碎念
必须有data,不然无法接受sd卡广播,因为sd卡本来就带有data
开机启动权限:
android笔记之碎碎念
应用被安装:android.intent.action.PACKAGE_ADDED
应用被更新:android.intent.action.PACKAGE_REPLACED
应用被卸载:android.intent.action.PACKAGE_REMOVED
SD卡可用:android.intent.action.MEDIA_MOUNTED
SD卡拔出:android.intent.action.MEDIA_REMOVED
SD卡不可用:android.intent.action.MEDIA_UNMOUNTED

6.startService()启动的服务所属的进程属于服务进程
Activity启动服务后,服务就自动运行,此时服务不再依赖activity,activity关掉也没事,服务已经启动了。

bindService()绑定的服务所属的进程不属于服务进程
Activity与服务建立连接,activity一旦死亡,服务也会跟着死亡
如果bindService()调用后,直接从activity返回,没有解绑,就会出现下列错误:
android笔记之碎碎念
这个错误是系统自动显示的错误,系统会继续向下执行,处理这个错误,而不会停止
android笔记之碎碎念
bindService()时,解绑时,使用一次unbindService()解绑就可以,如果再次解绑就会出现下列服务没有注册异常,因为之前服务已经被解绑了。
android笔记之碎碎念
服务执行的顺序:先开始后绑定,先解绑再停止

7.
android笔记之碎碎念
上述错误出现的原因是第一个OnClickListener已经引用下述包名(import android.view.View.OnClickListener;),而第二个OnClickListener则需要引用包import android.content.DialogInterface.OnClickListener;这就导致无法判断到底引用哪个包,会有命名冲突。
android笔记之碎碎念
解决方法是:
在第二个OnClickListener使用时指定具体所引用接口
android笔记之碎碎念

8
当对listview中具体的view(如 textview、imageview等)实现监听而不是整个listview时,可以在adapter中的getview对具体view设置监听,如下图所示:
android笔记之碎碎念

9. 在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点;
assets下面的文件不会被编译,通过路径可以去访问其中的内容。raw中文件会自动编译,我们可以在R.java文件中找到对应的ID
获取到Assets和Raw文件夹中的资源方法:
Assets:AssetManager assetManager = getAssets();
Raw: InputStream inputStream = getResources().openRawResource(R.raw.demo);

10.在使用achartengine画柱形图时,可以使用setBarwWdth()来设置柱形的宽度
renderer.setMarginsColor(Color.WHITE);可以设置柱形图周围的margin背景颜色(这里设置成白色)

11.当引入夏普名片识别代码时,出现native method not found 错误。而夏普名片识别的源程序运行正确,在导入自己的工程中却报错。原因在于调用的本地native 方法的包名与libnamecardrec.so中的包名不一致,导致无法找到 libnamecardrec.so中对应的本地native 方法,可以做个实验证明,在夏普名片识别的源程序改变cn.sharp.android.ncr.ocr.OCRManager的包名时,不允许修改,出现下列警告信息:
android笔记之碎碎念
说明在libnamecardrec.so中本地native的包名已经被写死了,我们也无法修改,因为看不到libnamecardrec.so中的c源码,或许反编译能得到源码呢。。。这样,我的解决办法就只能在自己的工程建立一个和夏普名片识别源码中一样的包名,把本地方法所在的类移植到此包下,这是夏普在打广告吗?
android笔记之碎碎念