PJL benar. Saya telah menggunakan sarannya dan inilah yang telah saya lakukan:
variabel global yang didefinisikan untuk fragmen:
private final Object attachingActivityLock = new Object();
private boolean syncVariable = false;
diimplementasikan
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
synchronized (attachingActivityLock) {
syncVariable = true;
attachingActivityLock.notifyAll();
}
}
3. Saya membungkus fungsi saya, di mana saya perlu memanggil getActivity (), di utas, karena jika itu akan berjalan pada utas utama, saya akan memblokir utas dengan langkah 4. dan onAttach () tidak akan pernah dipanggil.
Thread processImage = new Thread(new Runnable() {
@Override
public void run() {
processImage();
}
});
processImage.start();
4. dalam fungsi saya di mana saya perlu memanggil getActivity (), saya menggunakan ini (sebelum panggilan getActivity ())
synchronized (attachingActivityLock) {
while(!syncVariable){
try {
attachingActivityLock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Jika Anda memiliki beberapa pembaruan UI, ingatlah untuk menjalankannya di utas UI. Saya perlu memperbarui ImgeView jadi saya lakukan:
image.post(new Runnable() {
@Override
public void run() {
image.setImageBitmap(imageToShow);
}
});
getActivity()
. Juga, bagaimana Anda membuat fragmen? Apakah Anda memilikinya di layout.xml Anda?