개인 내부 클래스로 활동 내에서 많은 AsyncTasks를 사용합니다. 처음부터 나를 괴롭히는 한 가지는 onPostExecute()에서 어떤 컨텍스트를 얻을 수 있습니까?AsyncTask의 onPostExecute()에있는 컨텍스트는 무엇입니까?
아래 표시된 제거 된 예제를 보면 onPostExecute() 내에서 getString()을 사용할 수 있습니다. 통화에 사용 된 컨텍스트는 무엇입니까? doInBackground (예 : OrientationChange) 중에 Activity가 변경되어 해당 컨텍스트가 될 수 없습니다.
현재 Activity 컨텍스트 (task.context = this)를 패치하고 해당 컨텍스트 (context.getString())를 사용합니다.
내 질문 : 주위 Activity의 컨텍스트를 사용하지 않고 Inner Class AsyncTask의 onPostExecute() 내에 getString()을 사용하는 것이 저장 되나요?
미리 감사드립니다. onPostExecute
에서
task = new MyAsyncTask(this);
당신이 공급 포인터로 초기화 클래스 멤버 context
을 액세스하는 :
public class MyActivity extends Activity {
/* package */ MyActivity context;
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
public MyAsyncTask(final MyActivity context) {
super();
this.context = context;
}
@Override
protected Cursor doInBackground(/* ... */) {
// ...
}
@Override
protected void onPostExecute(/* ... */) {
if (context != null) {
// Currently I do use that
String s = context.getString(R.string.mytext);
context.task = null;
}
// Would this be save?
String s2 = getString(R.string.mytext);
}
@Override
protected void onPreExecute (/* ... */) {
// ...
}
}
/* package */ MyAsyncTask task;
@Override
public void onCreate(final Bundle bundle) {
// ...
Bundle bundleExtras = getIntent().getExtras();
if (bundleExtras != null) {
task = (MyAsyncTask) getLastNonConfigurationInstance();
if (task != null) {
task.context = this;
// ...
} else {
task = new MyAsyncTask(this);
task.execute();
}
}
}
@Override
public Object onRetainNonConfigurationInstance() {
if (task != null) {
// ...
task.context = null;
}
return task;
}
}
소리가 적당합니다. 그래서 "getString()"에 패치 된 "컨텍스트"가 없습니다. inPostExecute()는 AsyncTask 주위에 주변 활동이 있기 때문에 간단합니다. 따라서 Android보다 Java가 더 중요합니다. 당신의 대답을 받아 들일 것입니다. 감사. –
"안드로이드보다 자바에 가깝습니다."예, 내부 클래스의 외부 클래스의 메소드에 액세스하고 있습니다. 'Android'에서 이것은 외부 클래스 ('Activity')가 시스템에 의해 독립적으로 죽을 수 있기 때문에 피하기위한 것입니다. – Luksprog