Aşağıdaki yöntemi ihtiva eden iç içe geçmiş bir parçasını vardır:Android AsyncTask - doInBackground() neden idam edilmiyor?
public void onSave() {
if (getActivity() == null || view == null) return;
if (file != null && file.exists()) {
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
Log.d("log", "onPreExecute of save ex");
}
@Override
protected Void doInBackground(Void... params) {
Log.d("log", "doInBackground of save ex");
//DO SOMETHING
return null;
}
protected void onPostExecute(Void result) {
BaseFragment fragment = new LocalListFragment();
((LocalLauncherFragment)(LocalEditFragment.this.getParentFragment())).setFragment(fragment);
Log.d("log", "end of save ex");
};
}.execute();
} else {
showAlert();
}
}
Sorunum ilk kez bu yöntemi çağrısı, o OnPostExecute kadar yürütür olmasıdır(). Bununla birlikte, başka bir parçaya gidersem ve bu parçayı yeni açarsa (yeni bir parça nesnesi oluşturarak ve yerine yenisiyle), sadece onPreExecute() çalıştırılır. Bu asyncTask nesnesi neden ikinci kez iyi çalıştırılmıyor?
ExecuteOnExecutor() işlevini kullanırsam intestingly, ikinci kez çalışır. Ama neden yürütme() çalışmıyor? AsyncTask'ın hayatı parçalara mı bağlıydı?
Şimdiden teşekkürler!
Bu konuda kesin değilim, ancak Fragmanlar UI bileşenlerine sahip olabilir, bu yüzden arka plan iş parçacıklarında onlarla uğraşmaya dikkat etmeliyim. Günlük ifadenizi 'doInBackground' yöntemindeki ilk satır olarak eklemeyi ve görünüp görünmediğini görmeyi denediniz mi? – kabuko
Evet yaptım. ilk denemede, hem onPreExecute() doInBackground() çağrılır, ancak ikinci kez sadece onPReExeucte() çağrılır :( – user2062024
"executeOnExecutor" kullandığınızda, 'THREAD_POOL_EXECUTOR' kullandığınızı tahmin ediyorum ve değil SERIAL_EXECUTOR' ile? SERIAL_EXECUTOR' ile deneyin ve ben de aynı (istenmeyen) davranışı alırsınız. – kabuko