У меня довольно часто встречающаяся ситуация в Android, которая связана с предыдущей асинхронной модификацией активности, в то время как активность была потеряна из-за изменения ориентации.OrientationChange не разрушает активность?
У меня есть деятельность, деятельность А.
Activity A implements OnDownloadCompleteListener {
public void sync()
{
new SyncAttestationInfoTask(this).execute();
}
@Override
public void onComplete()
{
loadAttestationInfo();
}
}
Вот мой AsyncTask укорачивается:
package com.evento.mofa.backgroundtasks;
import java.util.ArrayList;
import java.util.List;
/**
* @author Ahmed
*
*/
public class SyncAttestationInfoTask extends AsyncTask<Void, Void,Void> {
/*TIP*/
//TO SPEED UP THIS OPERATION WE CAN USE THE EXECUTEONEXECUTOR .
private ProgressDialog pd;
private OnDownloadComplete parentActivityContext;
EntityConvert convert = new EntityConvert();
private AttestationDao aDao = new AttestationDao();
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
if (Locale.getDefault().getLanguage().equals("ar"))
{
/*EMPTY ALL THE TABLES THEN START PROCESSING*/
aDao.flushTables(Locale.getDefault().getLanguage());
syncAttestLocations(Webservices.ATTEST_LOCATION_AR,1);
syncDocumentTypes(Webservices.DOCUMENT_TYPES_AR,1);
syncAttestationInfo(Webservices.ATTESTATION_INFO_AR,1);
} else {
/*EMPTY ALL THE TABLES THEN START PROCESSING*/
aDao.flushTables(Locale.getDefault().getLanguage());
syncAttestLocations(Webservices.ATTEST_LOCATION,0);
syncDocumentTypes(Webservices.DOCUMENT_TYPES,0);
syncAttestationInfo(Webservices.ATTESTATION_INFO,0);
}
return null;
}
public SyncAttestationInfoTask(OnDownloadComplete context) {
parentActivityContext = context;
}
@Override
protected void onPreExecute() {
pd = new ProgressDialog((Context)parentActivityContext);
pd.setTitle("Loading...");
pd.setMessage("Updating Data.");
pd.setCancelable(false);
pd.setIndeterminate(true);
pd.show();
}
@Override
protected void onPostExecute(Void result) {
pd.dismiss();
parentActivityContext.onComplete();
// findViewById(R.id.the_button).setEnabled(true);
}
}
Существует что-то странное с моей деятельностью.
- я поставил точку останова на функцию обратного вызова OnComplete внутри моей деятельности
- я начинаю прогресс диалоговое внутри задачи синхронизации асинхронной.
- Как только на экране отображается диалоговое окно прогресса, я просматриваю свое устройство.
- Диалоговое окно исчезает, и
pd.dismiss()
вызывает ошибку «View not attach» (я понимаю, что активность, к которой она привязана, больше не существует). - Вышеуказанное означает, что
parentActivityContext().oncomplete
также должен выдать ту же ошибку, однако это не так. - Я прокомментировал
pd.Dismiss()
и выяснил, что вызывается точка останова наonComplete()
? Разве это не странно, учитывая тот факт, что ссылка на деятельность была потеряна в этот момент?
Просьба дать мне представление об этом.
спасибо. Я хотел бы использовать фрагментный подход. Однако в настоящее время мое приложение не использует никаких фрагментов. Просто старая школьная деятельность. Это проблема, или я все еще могу выполнить задачу с кодом, который вы предложили? , –
Если вы хотите поддерживать уровни API более ранних, чем 10, вам нужно будет включить библиотеку поддержки и расширить ваши действия «FragmentActivity» и использовать 'getSupportFragmentManager()'. В противном случае вы можете просто использовать не поддерживающую библиотеку Фрагменты и FragmentManager – JuniKim