每日一练 20190526

1.如何删除SQLite中表的个别字段

参考回答:

    SQLite数据库只允许增加字段而不允许修改和删除表字段,只能创建新表保留原有字段,删除原表

 2.使用SQLite时会有哪些优化操作?

参考回答:

使用事务做批量操作
及时关闭Cursor,避免内存泄露
耗时操作异步化:数据库的操作属于本地IO耗时操作,建议放入异步线程中处理
ContentValues的容量调整:ContentValues内部采用HashMap来存储Key-Value数据,ContentValues初始容量为8,扩容时翻倍。因此建议对ContentValues填入的内容进行估量,设置合理的初始化容量,减少不必要的内部扩容操作
使用索引加快检索速度:对于查询操作量级较大、业务对查询要求较高的推荐使用索引

 3.Android中进程和线程的关系? 区别?

参考回答:

线程是CPU调度的最小单元,同时线程是一种有限的系统资源
进程一般指一个执行单元,在PC和移动设备上一个程序或则一个应用
一般来说,一个App程序至少有一个进程,一个进程至少有一个线程(包含与被包含的关系),
通俗来讲就是,在App这个工厂里面有一个进程,线程就是里面的生产线,但主线程(主生产线)只有一条,而子线程(副生产线)可以有多个
进程有自己独立的地址空间,而进程中的线程共享此地址空间,都可以并发执行

 4.如何开启多进程 ? 应用是否可以开启N个进程 ?

参考回答:

    在AndroidMenifest中给四大组件指定属性android:process开启多进程模式
    在内存允许的条件下可以开启N个进程

 5.为何需要IPC?多进程通信可能会出现的问题?

参考回答:

所有运行在不同进程的四大组件(Activity、Service、Receiver、ContentProvider)共享数据都会失败,这是由于Android为每个应用分配了独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这会导致在不同的虚拟机中访问同一个类的对象会产生多份副本。比如常用例子(通过开启多进程获取更大内存空间、两个或则多个应用之间共享数据、微信全家桶)
一般来说,使用多进程通信会造成如下几方面的问题

静态成员和单例模式完全失效:独立的虚拟机造成
线程同步机制完全实效:独立的虚拟机造成
SharedPreferences的可靠性下降:这是因为Sp不支持两个进程并发进行读写,有一定几率导致数据丢失
Application会多次创建:Android系统在创建新的进程会分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程,自然也会创建新的Application

 

posted @ 2019-05-20 10:54  疯子FK  阅读(221)  评论(0编辑  收藏  举报