关闭

Activity与startService的生命周期

664人阅读 评论(0) 收藏 举报
分类:

一. 最近自己在做一个通讯录的归属地划分模块;被Activity和Service的 生命周期这块折磨得蛋碎一地,今天来写下自己的分析结果

二.Activity的onCreate()方法中StartService的生命周期

1.点击应用图标: Activity:--->onCreate()--->onStart()-->onResume()

                              Service:--->onCreate()---->onStartCommand()--->onStart()

2.Activity跳到下一个界面时:当前Activity:onPause()--->onSaveInstanceState()---->onStoop()

                                                   下个Activity:onCreate()--->onStart()-->onResume()

3.当前界面按返回键时,当前Activity:onPause()--->onStop()---->onDestroy()

 

4.当前界面按HOMAE键,当前Activity:onPause()--->onSaveInstanceState()-->onStop()

    当返回到栈顶时如果Activity没有被处理掉的话:onRestart()--->onStart()--->onResume()

                                        Activity已经被处理掉的话:onCreate()--->onStart()---->onResume();此时可以从onCreate()方法出入的Bundle对象取出onSaveInstanceState()保存的配置                                               

 

5.onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉
为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。

6.

      1).到startService了,通过StartService启动的Service与Activity无关即使Activity被杀死,Service依然在后台运行;我是在Service的onStart()方法去启动线程来对数据库进行查询的(查询时间有一分钟左右,比较久),这样问题就来了。

       2).当打开了很多界面且存联系人跳转到消息应用一段时间后再返回时,Activity上的数据全是空的了,查看的Activity的生命周期,返回时调用的方法是:onCreate()-->onStart()-->onResume();得知Activity已经被杀死,因此再返回到第一个Activity时又会调用onCreate()方法去StartService(),此时原先启动的Service并没有onDestroy().因此又会调用一个新的线程去查找数据库,那么此时就同时有两个线程操作数据库了;第一个线程先启动,所以它先执行完,执行完后就db.close();此时另一个线程正在查询但是db关闭了程序果断崩溃。

      3).解决方法:

      由于startService(),如果Service存在就只会调用onStart(),如果不存在调用onCreate()--->onStart();所以把启动线程移动到StartService的onCreate()方法

                                                                                                                                                                                                                     ---------------------未带完续,还有很多的疑问-------------

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36225次
    • 积分:595
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:4篇
    • 译文:0篇
    • 评论:22条
    最新评论