2013年4月24日水曜日

[AndroidSDK]AsyncTaskを使用してバックグランド処理を行う。

ネットワーク処理をさせている間にProgressDialogを表示させたい時など
public class MainActivity extends Activity {
    ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        progressDialog = new ProgressDialog(this);

        MyAsyncTask task = new MyAsyncTask();
        //バックグランド処理を実行
        task.execute(getApplicationContext());
        //このログが実行されているときに、MyAsyncTaskが終わっているとは限らなので
        //MyAsyncTask後に処理させたいときはonPostExecute()を使用すること
        Log.i("tag", "mes");
    }

    public class MyAsyncTask extends AsyncTask {
        @Override
        //doInBackgroundが実行されてる前に呼ばれる
        protected void onPreExecute() {
            //ProgressDialogなどはここで実装すると良い
            progressDialog.setMessage("データを取得しています。");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

        //バックグランド処理はここに追加
        @Override
        protected Integer doInBackground(Context... context) {
            //何かの処理

            return 1;
        }

        //doInBackgroundが実行された後に呼ばれる
        @Override
        protected void onPostExecute(Integer result) {
            progressDialog.dismiss();
        }
    }
}