我们有一个申请:
public class MyApplication extends Application {
...
}
包含一个名为Start的主Activity,在AndroidManifest.xml中配置
MyApplication启动AsyncTask,它会加载数据。
当AsyncTask返回时,应用程序想要通知Start,
但MyApplication似乎没有引用Start。
应用程序可以直接在Activity上调用方法吗?
答案 0 :(得分:3)
Application可以直接在Activity上调用方法吗?
不确定。如果你不小心的话,你会结束内存泄漏,我会考虑你所描述的编程不好。至少,使用听众或观察者模式,正如@fiction所暗示的那样。
当AsyncTask返回时,Application想要通知Start, 但MyApplication似乎没有引用Start。
然后编写适当的Java代码,让Start
注册某种监听器(或观察者,使用@fiction的术语)和MyApplication
,以便与AsyncTask
一起使用。请务必取消注册该侦听器,或使用SoftReference
或其他内容,以确保MyApplication
在Start
的生命周期内没有强烈引用Start
。< / p>
当然,您需要处理这样一个事实:您可以拥有多个Start
的实例。
答案 1 :(得分:1)
在Application onStart()中启动AsyncTask对我来说很奇怪。这意味着,从您的用户想要启动应用程序的那一刻起,直到完成数据加载,您不会向用户提供有关您的应用程序正在执行的操作的任何反馈。然后,过了一会儿,你的Activity就会弹出。
此外,不要忘记在应用程序生命周期中只调用一次Application.onStart(),直到系统决定将其终止或发生强制关闭。
我会首先启动一个Activity,然后在Activity.onCreate()中,在初始化指示发生了某些事情的最小UI组件集之后,我将启动AsyncTask来检索数据。如果以这种方式完成任务,您甚至可以非常轻松地显示由AsyncTask更新的进度条。