安卓拨号器(AS+SQLite+ModelView)
作者:互联网
百度网盘工程zip下载链接:https://pan.baidu.com/s/1TS8oTjQDdZY25J7dpFVKOg
提取码:pjyz
目录
2.定义一个entity类时,实现Serializabel接口的目的?
3.另外在安卓访问数据库,要在主线程进行,会导致页面很卡。可以写一个子线程进行访问。如何将子线程访问到的数据发送给主线程呢?
4.主线程用Hadler接受子线程消息,需要将声明静态的MtHadler类继承Hanler类:
5.读取res/raw文件夹下的数据使用io流,虚拟机的文件系统与电脑文件系统不一样!不要用绝对路径读取数据。
8.当需要MainActivity和子Fragment共享一个viewModel时,在fragment里面一定是
项目中遇到的一些小问题
1.非ui线程里面修改界面数据,一定要通知
2.定义一个entity类时,实现Serializabel接口的目的?
如果需要发送该类数据,使用Handler可以用handler.setData(new Bundle().putSerializable(数据对象))来实现
3.另外在安卓访问数据库,要在主线程进行,会导致页面很卡。可以写一个子线程进行访问。如何将子线程访问到的数据发送给主线程呢?
方法:可以使用Handler机制,主线程建立Handler对象,子线程使用。
所谓的在子线程通过handle发送消息,然后回主线程处理消息,通过handleMessage进行UI的更新,这个例子其实很常见,就是在主线程中我们通过创建一个mainHandler对象,然后并重写这个handler的handleMessage函数,并在子线程中通过主线程中创建的这个mainHandler来发送消息给主线程。 其实在主线程中创建的这个mainHandler,他在new的时候,就会自动的和主线程中的looper对象进行绑定,而looper对象里只有一个messageQueue,所以这样3者就建立了联系。同时主线程中的Looper会不停的loop,在这个loop函数里面他会不断的取looper对象里面的MessageQueue中的massage,然后调用消息目标(发送消息的handler)的handleMessage。其实这一切都是在主线程下执行的,所以才能进行UI的更新。 那么在子进程中发送消息,其实只是在子线程中引用了mainHander这个handler对象,并调用该handler对象的sendMessage函数发送消息,而发送消息函数sendMessasge函数所做的事情,是将需要发送出去的这个message放入handler对象的消息队列中,就完事了。注意:这里的发送消息,仅仅是将消息入队到调用发送消息的那个handler对象的消息队列中,而不是调用发送消息的这个子线程的消息队列中。 例如mainHandler.sendEmptyMessage(0)这个函数,他入队消息的队列是mainHandler对应的MessageQueue中,跟调用发送消息的队列无关。 |
4.主线程用Hadler接受子线程消息,需要将声明静态的MtHadler类继承Hanler类:
主线程:
子线程:
5.读取res/raw文件夹下的数据使用io流,虚拟机的文件系统与电脑文件系统不一样!不要用绝对路径读取数据。
6.AS下使用轻量级的数据库SQLite
双击可以打开:
8.当需要MainActivity和子Fragment共享一个viewModel时,在fragment里面一定是
ViewModelProviders.of(getActivity()).get(MyViewModel.class)
而不是
ViewModelProviders.of(this).get(MyViewModel.class)
9.SQLite语法编写错误,字符串两侧加' '
标签:SQLite,ModelView,安卓,主线,mainHandler,发送,handler,线程,消息 来源: https://blog.csdn.net/qq_43496675/article/details/111300436