Application可以直接在Activity上调用方法吗?

时间:2010-12-29 16:05:55

标签: android

我们有一个申请:

public class MyApplication extends Application {
...
}

包含一个名为Start的主Activity,在AndroidManifest.xml中配置

MyApplication启动AsyncTask,它会加载数据。

当AsyncTask返回时,应用程序想要通知Start,
但MyApplication似乎没有引用Start。

应用程序可以直接在Activity上调用方法吗?

2 个答案:

答案 0 :(得分:3)

  

Application可以直接在Activity上调用方法吗?

不确定。如果你不小心的话,你会结束内存泄漏,我会考虑你所描述的编程不好。至少,使用听众或观察者模式,正如@fiction所暗示的那样。

  

当AsyncTask返回时,Application想要通知Start,   但MyApplication似乎没有引用Start。

然后编写适当的Java代码,让Start注册某种监听器(或观察者,使用@fiction的术语)和MyApplication,以便与AsyncTask一起使用。请务必取消注册该侦听器,或使用SoftReference或其他内容,以确保MyApplicationStart的生命周期内没有强烈引用Start。< / p>

当然,您需要处理这样一个事实:您可以拥有多个Start的实例。

答案 1 :(得分:1)

在Application onStart()中启动AsyncTask对我来说很奇怪。这意味着,从您的用户想要启动应用程序的那一刻起,直到完成数据加载,您不会向用户提供有关您的应用程序正在执行的操作的任何反馈。然后,过了一会儿,你的Activity就会弹出。

此外,不要忘记在应用程序生命周期中只调用一次Application.onStart(),直到系统决定将其终止或发生强制关闭。

我会首先启动一个Activity,然后在Activity.onCreate()中,在初始化指示发生了某些事情的最小UI组件集之后,我将启动AsyncTask来检索数据。如果以这种方式完成任务,您甚至可以非常轻松地显示由AsyncTask更新的进度条。