나는 내 질문과 거의 같은 질문을 거의 보지 못했지만 모든 의문점을 해결할 수있는 완전한 답을 찾을 수 없었다. 그래서 나는 여기있다 ... AsyncTask
클래스를 확장 한 내부 클래스를 가진 활동이 있다고 가정 해보자. 같은 : 실행중인 활동이 아직 실행 중일 때 중지/파괴 될 때 AsyncTask는 어떻게됩니까?
public class MyActivity extends Activity {
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
protected Bitmap doInBackground(String... urls) {
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result) {
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new DownloadImageTask().execute("http://mysite.com/image.png")
}
}
은 활동이 일시 정지 또는
DownloadImageTask
여전히 백그라운드에서 실행되는 동안 (아마도 두 경우가 다른) 파괴한다고 가정하자 .. 다음 활동 UI 스레드에서 실행되는
DownloadImageTask
의 방법 가 트리거 될 수 있고
DownloadImageTask
은 Activity 클래스의 메서드 (내부 클래스이므로 외부 클래스의 메서드와 인스턴스 변수에 액세스 할 수 있음)에 액세스하려고 시도 할 수 있습니다 (예 :호출). 아래 예제에서.. 그러면 어떻게됩니까? 그것은 조용히 실패합니까? 예외가 발생합니까? 사용자에게 문제가 발생했음을 알리는 메시지가 표시됩니까?
실행중인 UI 메서드가 호출 될 때 시작 스레드 (이 경우 Activity)가 여전히 작동하는지주의해야한다면 AsyncTask
에서 어떻게 수행 할 수 있습니까?
중복 된 질문으로 이것을 발견,하지만 어쩌면이 질문은 좀 더 관절과 사람이 R.id.test가를 의미 곳 (이 작업을 고려 자세히
이 코드를 실행했을 때 자동으로 오류가 발생했는지, 예외가 발생했는지, 사용자에게 잘못된 점을 알렸습니까? – CommonsWare
나는 아직 그런 코드를 실행하지 않았다. 나는 며칠 동안 그것을 할 것이다. 나는 앱의 구현을 계속하기 전에 그것에 대해 궁금해하고 있었다. 테스트를 실행할 수있는대로이 포스트를 업데이트하겠습니다.고맙습니다. @ CommonsWare –
요점은 행동이 문서화되어 있지 않다는 것입니다. 특히 우리가 그 활동에서 다른 것을 본적이 없다는 사실을 고려할 때. 'findViewById()'는'R.id.img'에 대해'null '을 반환 할 수도 있고 그렇지 않을 수도 있습니다. 그리고 그 동작은 Android OS 릴리스, 장치 제조업체 변경 및 ROM 개조를 기반으로 장치마다 다를 수 있습니다. – CommonsWare