android直接杀死一个应用与通过回退键退出一个应用的区别
2016-05-18 22:36
323 查看
可能大神看到我这个问题会觉得很逗比吧!不过我真的遇到了这方面的问题。
直接杀死一个应用:所有的内存都会被回收,重新启动应用程序时,需要重新调用Application的OnCreate方法,会调用onSaveInstanceState方法。
退出键退出程序:退出程序后,一些加载过的静态变量并没有被回收,重新启动也不需要调用Application的OnCreate方法。
分清楚这些有什么用呢?
我要做的事情是这样的:要在程序退出之前将一些数据存到数据库中。很自然的想法是在OnDestroy方法中调用insert不就行了?如果是通过第二种方式退出应用程序的话,确实是可行的。不过如果通过第一种方式,该怎么办呢?在杀死应用程序的时候,存储操作没执行结束,程序就彻底死掉了,必然存不进去,这是就是我逗比的地方,竟然忘记了,这种退出方式属于异常的退出,会调用onSaveInstanceState方法,所以我们可以在这个方法里面再写入。这时可能会有疑问,你就不怕重复插入吗?
其实这就用到了一个数据库操作的小技巧了,无论是在OnDestroy方法,还是在onSaveInstanceState方法,我们均先调用的是update,通过判断update方法返回的行数判断,如果等于0,则表明要更新的数据不存在,则需要再调用insert方法。
代码如下:
再说一下那个静态变量有没有回收导致的坑,如果你是像这样直接在其声明时就初始化了,你会发现当你的程序通过第二种方式退出后再进入,这个arrayList的size不是为0的,也就是说它还是存在的。如果这时再向其中插入新的数据,会发现显示出的内容不正确。
直接杀死一个应用:所有的内存都会被回收,重新启动应用程序时,需要重新调用Application的OnCreate方法,会调用onSaveInstanceState方法。
退出键退出程序:退出程序后,一些加载过的静态变量并没有被回收,重新启动也不需要调用Application的OnCreate方法。
分清楚这些有什么用呢?
我要做的事情是这样的:要在程序退出之前将一些数据存到数据库中。很自然的想法是在OnDestroy方法中调用insert不就行了?如果是通过第二种方式退出应用程序的话,确实是可行的。不过如果通过第一种方式,该怎么办呢?在杀死应用程序的时候,存储操作没执行结束,程序就彻底死掉了,必然存不进去,这是就是我逗比的地方,竟然忘记了,这种退出方式属于异常的退出,会调用onSaveInstanceState方法,所以我们可以在这个方法里面再写入。这时可能会有疑问,你就不怕重复插入吗?
其实这就用到了一个数据库操作的小技巧了,无论是在OnDestroy方法,还是在onSaveInstanceState方法,我们均先调用的是update,通过判断update方法返回的行数判断,如果等于0,则表明要更新的数据不存在,则需要再调用insert方法。
代码如下:
/** * 数据库的更新操作 * @param dbHelper DatabaseHelper对象 * @param user UserInfo对象 * @param name 表名 */ public static void update(DatabaseHelper dbHelper,UserInfo user,String name){ SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); if(name.equals("step")){ values.put("datetime",user.getDatatime()); values.put("count",user.getCount()); int i = db.update(name,values,"datetime=?",new String[]{user.getDatatime()}); values.clear(); if(i == 0){ insert(dbHelper,user,name); } db.close(); } }
再说一下那个静态变量有没有回收导致的坑,如果你是像这样直接在其声明时就初始化了,你会发现当你的程序通过第二种方式退出后再进入,这个arrayList的size不是为0的,也就是说它还是存在的。如果这时再向其中插入新的数据,会发现显示出的内容不正确。
private static ArrayList<UserInfo> arrayList = new ArrayList<UserInfo>();
相关文章推荐
- android随笔小记service之一
- Android事件分发机制完全解析(上)
- Android wpa_supplicant之--运行方式
- Xamarin.Android ListView Item 内部控件Click事件
- Android 中String文件通配符使用
- Android自定义控件
- android之客户端从服务端解析数据及上传与反馈数据
- Android draw9patch 图片制作与使用
- 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
- android自定义接口,然后在activity中实现点击监听,调用getView解决滑动错位的问题
- 百分比布局,android自定义View。
- JNI初试
- Xamarin.Android CommonAdapter+ViewHolder
- Android对图片进行压缩
- android view手势冲突的通用解决方法
- Android自定义ListView的Item无法响应OnItemClick的解决办法
- Android Studio 1.5.1更新至2.1.1
- Android 开发实战经验总结
- Android中ListView的优化
- android欢迎向导页面