放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

Activity的生命周期简明分析

略过文绉绉的文档,直接说有用的。通常我都是在需要生成Activity的单例的情境下才会关注Activity的生命周期,这篇博文会总结下实现Activity单例的方法以及业务逻辑的整合。

先谈谈单例,有两种方法可以实现Activity的单例,一种是编辑AndroidManifest.xml

<activity android:name=".ShareActivity" android:launchMode="singleInstance">  
    <intent-filter>  
        <action android:name="android.intent.action.MAIN" />  
        <category android:name="android.intent.category.LAUNCHER" />  
    </intent-filter>  
    <intent-filter>  
        <action android:name="android.intent.action.SINGLE_INSTANCE_SHARE" />  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</activity>

重点是android:launchMode="singleInstance"这一句,关于launchMode的解说,这篇文章是我见过的总结得最好的:

基础总结篇之二:Activity的四种launchMode

接着谈谈业务逻辑的整合,我遇到的场景是一个Activity需要显示新闻,不一定是从新闻列表跳转过去,也可能从一个新闻跳到另一个新闻,如果没有单例的话,内存可能会被吃光。所以我使用单例,并且需要Activity“在恰当的时机知道要刷新页面”。那么这个时机如何找呢?

让我们看一张Android Activity时序图:

从上图可以看出onCreate虽然是最先调用的,但是后面还有两个更有用的回调,两者都是从后台转到前台时调用,其中onStart()是从“停止”过来的,而onResume则是从“被挡住”过来的,我觉得onResume更加符合需求。

于是我在onResume里面判断是否需要刷新,这个问题就解决了。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Activity的生命周期简明分析

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的作品

HanLP自然语言处理包《自然语言处理入门》