朋友,
我从应用程序onCreate()
运行异步任务现在我想在完成此任务时引发一个接口,并在ACtivity B中实现它。
任何人都指导我如何实现这个目标?
我的界面
public interface IBanksLoader
{
public void OnBankLoadingComplete(boolean complete);
}
在应用程序类
中AsyncTask
{
any other function();
// to raise it here
}
Activity b
{
// implement it here to get result.
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用observer pattern来实现此行为。
活动B将实现IBanksLoader(观察者)接口并将其自身注册到某个中心组件。当AsyncTask完成时,必须通知此中央组件,然后调用所有已注册观察者的OnBankLoadingComplete()(相当于Observer接口的notify())。
我建议使用Singleton或Application类作为中心组件,因为它们可以在应用程序的任何位置轻松访问,也可以从AsyncTask访问。
但要注意应用程序的生命周期。因此,您可能需要在某个时间取消注册活动B,例如在它被摧毁之前。否则,中心组件将在一个null的对象上调用OnBankLoadingComplete(),从而引发NullPointerException。
更新
public class ActivityB extends Activity implements IBanksLoader {
public void onCreate(){
...
MyApplication app = (MyApplication) getApplication();
app.register(this);
...
}
public void OnBankLoadingComplete(boolean complete){
// your code here ...
}
public void onDestroy(){
MyApplication app = (MyApplication) getApplication();
app.unregister(this);
}
}
public class MyApplication extends Application{
private List<IBanksLoader> observers = new ArrayList<IBanksLoader>();
public void register(IBanksLoader observer){
if(observer != null){
oberservers.add(observer);
}
}
public void unregister(IBanksLoader observer){
if(observer != null){
oberservers.remove(observer);
}
}
public void taskfinished(){
foreach(IBanksLoader bank : observers){
if(bank != null){
bank.OnBankLoadingComplete(true);
}
}
}
}
public class MyTask extends AsyncTask{
...
public void onPostExecute(){
MyApplication app = (MyApplication) getApplication();
app.taskfinished();
}
...
}