一.情景描述:
最近在做毕业设计:天气APP,主界面HomeActivity显示天气数据,CityActivity是城市管理界面,HomeActivity每次会加载CityActivity中的置顶城市。我要解决的问题 是,当城市管理列表的置顶城市发生改变时,主界面数据也改变。
注意:当打开app运行时,HomeActivity是在onCreate方法中请求的数据库城市列表天气数据
HomeActivity是app首页。
二.解决思路分析:
利用activity生命周期
情景1:HomeActivity跳到CityActivity时,不被finish掉。
页面跳转 HomeActivity生命周期
HomeActivity->CityActivity onResume->onPause
CityActivity->HomeActivity onPause->onResume
观察发现,我们可以利用onPause去刷新HomeActivity的数据。
情景2:HomeActivity跳到CityActivity时,被finish掉。
HomeActivity->CityActivity onResume->onPause->onStop->onDestroy
CityActivity->HomeActivity onCreate->onStart->onResume
观察发现,我们可以在onPause,onStop,onCeate中去刷新HomeActivity的数据。
我们再对HomeActivity生命周期所有使用场景分析一下(我所能想到的所有场景):
1.HomeActivity->手机主屏(就是你直接按手机HOME键,返回你屏幕界面情况,这是你就看不到HomeActivity了吧,除非你长按HOME键,会弹出HomeActivity缩 小的界面)。(我就不配图了,如果图片太多的话,会影响大家的观看效果)
onResume->onPause->onStop (注意:这里我们不讨论HomeActivity的finish情况,因为这样做app会关掉,而我们讨论的是CityActivity到HomeActivity 时,刷新数据)
2.手机主屏->HomeActivity(就是你长按手机HOME键,点击HomeActivity缩小的界面,然后它就会放大,这时候你看到的就不是手机主屏了,而是HomeActivity)
onRestart->onStart->onResume
3.手机主屏->其他app页面
无变化
4.手机主屏->锁屏
无变化
5.HomeActivity(app首页)->手机返回键(按了该键后,HomeActivity并没有消失,你按长HOME键的时候,还能看到它)->HomeActivity
onPause->onStop->onDestroy->onCreate->onStart->onResume
6.HomeActivity->锁屏
onResume->onPause->onStop
7.HomeActivity->关机/电池没电(未测试)
前面情景1,2时,我说onPause,onStop,onCeate可以去刷新HomeActivity数据,结合刚说的HomeActivity生命周期使用场景,我们发现onPause,onStop会被多次调 用,因为这些使用场景使我们生活中经常操作的,而相比较之下,onCreate只出现了一次,那么我们就用onCreate了,因为它消耗的资源少。
三.解决方法:
CityActivity->HomeActivity,也就是第二页面调回第一页面(我app首页),两种方法:
方法一:setOnClickListener
就是xml布局中,定义一个id(比如按钮,图片,文字),点击监听,然后用intent返回HomeActivity。
方法二:按手机返回键(HOME键旁边的,我的返回键在HOME键右边)
在方法onBackPressed中用intent返回
注意:1.在HomeActivity->CityActivity的时候,一定要finish掉HomeActivity(理由:看上面情景2,因为只有这样,你才有机会用到onCreate)
2.我打开app时,HomeActivity第一次初始化数据就是在onCreate方法进行的;当我从CityActivity返回到HomeActivity时,如果我的城市列表置顶城市发生变化, HomeActivity初始化数据的时候,就会相应变化。