【问题标题】:How long can I hold onto a ContentResolver in an AsyncTask?我可以在 AsyncTask 中保留 ContentResolver 多长时间?
【发布时间】:2011-04-15 11:18:22
【问题描述】:

我正在尝试编写一个 Activity,它会为长时间运行的操作生成一个 AsyncTask,并定期将状态更新发布回 Activity。我想确保 AsyncTask 在屏幕旋转或 OOM 等其他破坏条件下正确存活。

I've read this thread on the android-developers list,然后是led me to this implementation,这几乎就是我需要的。但是,我的 AsyncTask 的最后一步是从内容解析器中删除一些数据。不能跳过这一步是极其重要的,因为数据是敏感的,在正常情况下不应该留在手机上。但是,ContentResolvers 来自 Contexts,在本例中为 Activity,并且使用此方案,当 AsyncTask 准备好执行删除操作时,Activity 可能为 null。

在 AsyncTask 构造时从 Activity 获取 ContentResolver 并在 Activity 的生命周期之后保留它是否安全?如果没有,我该怎么办?

【问题讨论】:

    标签: android android-asynctask screen-rotation


    【解决方案1】:

    为什么不从 Application 获取 ContentResolver ?您需要了解 Activity 和 Context 背后的不同概念——仅仅因为 Activity 是 Context,并不意味着您需要将 Activity 用于它所做的所有任务。仅将 Activity 用于 UI 内容

    【讨论】:

    • groups.google.com/group/android-developers/browse_thread/thread/… 是来自同一开发人员的一封邮件,上面写着“不要使用 getBaseContext(),只需使用您拥有的上下文。”。所以我想我的问题是,我有什么背景? Application 上下文是否优于 Base 上下文?
    • 是的,应用程序上下文是更可取的方式,因为它始终存在(如果您的代码此时实际上正在执行并且需要上下文,则有一个活动的应用程序对象)。创建应用程序的静态实例。在它的 onCreate: instance=this;并创建一个公共静态应用程序 get() {返回实例;}。这样,当你需要一个上下文时,你总是有一个上下文
    猜你喜欢
    • 2015-10-04
    • 2015-10-31
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多