我尝试使用AsyncTaskLoader
,我有一个问题。我从互联网加载AsyncTaskLoader
数据,然后在方法onLoadFinished
中启动其他活动(BusModelsActivity)
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
}
但是当我单击活动BusModelsActivity并返回到BusSearchParamActivity方法onLoadFinished
再次运行时,BusModelsActivity再次启动。怎么办呢?点击按钮时我会调用其他活动:
public void pickUpButtonClick(View v) {
getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
}
其中busModelsCallBack是LoaderCallbacks接口的实现。当我进行调试时,它仅在onLoadFinished上停止,而不是onCreateLoader或单击按钮。
答案 0 :(得分:0)
我不敢告诉你,到目前为止AsyncTask
行为并非100%被批准。您有两种方法可以解决这个问题。
1)以Thread
代替AsyncTask
执行您的操作。这将确保您的代码只会执行一次,因为Thread
永远不会开始两次,直到您想要这样做。如下
new Thread(new Runnable() {
@Override
public void run() {
/All your code here
}
}).start();
2)在您的static
activity
参数中声明isPageLoaded
,最初的值为false
,并在true
内将其设置为onLoadFinished
在第一次加载页面并在执行onLoadFinished
代码之前检查其值,如下所示:
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
if(!isPageLoaded){
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
isPageLoaded = true;
}
}
答案 1 :(得分:0)
尝试:
private static boolean isClicked = false;
@Override
public void onLoadFinished(Loader<List<BusModelParcelable>> loader, List<BusModelParcelable> data) {
if(isClicked )
{
hideDialog();
Log.d("onLoadFinished", TestTags.TAG1);
Intent intent = new Intent(BusSearchParamActivity.this,BusModelsActivity.class);
intent.putParcelableArrayListExtra(AppVariables.BUS_MODELS_LIST, (ArrayList) data);
startActivity(intent);
isClicked = false;
}
}
public void pickUpButtonClick(View v) {
isClicked = true;
getSupportLoaderManager().initLoader(LOADER_MODELS,null,busModelsCallBack);
}