インターフェイスの使用 1) インターフェイスを 1 つ作成する
public interface OnDataSendToActivity {
public void sendData(String str);
}
2)アクティビティに実装します
public class MainActivity extends Activity implements OnDataSendToActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
new AsyncTest(this).execute(new String[]{"AnyData"}); // start your task
}
@Override
public void sendData(String str) {
// TODO Auto-generated method stub
}
}
3) AsyncTask(Activity activity) にコンストラクタを作成する{} AsyncTask ファイルに Interface を登録し、以下のように Interface メソッドを呼び出します。
public class AsyncTest extends AsyncTask<String, Integer, String> {
OnDataSendToActivity dataSendToActivity;
public AsyncTest(Activity activity){
dataSendToActivity = (OnDataSendToActivity)activity;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dataSendToActivity.sendData(result);
}
}
ここで、OnPostExecute は、AsyncTask によってすべてのタスクが完了した後に呼び出され、doInBackground(){ return "";} によって返されるパラメーターとして「結果」を取得します。
while "dataSendToActivity.sendData(result);" アクティビティのオーバーライドされたメソッド「public void sendData(String str) {}」を呼び出します。
覚えておくべき極端なケース: を必ず渡しthis
ます。つまり、現在のアクティビティのコンテキストをに渡し、アクティビティのAsyncTask
別のインスタンスを作成しないでください。そうしないと、アクティビティActivity
が破棄され、新しいインスタンスが作成されます。