Android에서 비동기 처리(AsyncTask)를 반복하는 방법 알아보기

환경


  • Windows 7
  • AndroidStudio 3.0

  • 무엇을 원하십니까?



    AsyncTask의 처리가 완료된 후에 다시 AsyncTask를 호출하는 처리를 무한 루프시키고 싶다.

    작성 앱



    github에 올려 보았다. 이것의 "Sample_CallBack_Repeat"
    htps : // 기주 b. 코 m / 그래 r 세이 카츠 / 안 d 로이 d_ mp ぇ_

    비동기 처리의 콜백이 호출될 때마다 카운트가 진행된다.
    클리어로 카운트를 0으로 한다. ↓


    비동기 처리를 배운 과정



    샘플을 3개 만들고 방법을 배웁니다.
    Sample_CallBack1에서 콜백 방법을 배웁니다.
    'Sample_CallBack2'에서 콜백을 받는 위치를 변경하는 방법을 알아보세요.
    Sample_CallBack_Repeat에서 비동기 처리를 반복하는 방법을 배웁니다.

    모든 샘플 공통 비동기 처리 부분.

    ASyncTaskTest.java
    // AsyncTaskの引数は以下の用途で使用。
    // 第一引数:doInBackgroundの引数
    // 第二引数:onProgressUpdateの引数
    // 第三引数:doInBackgroundの戻り値 and onPostExecuteの引数
    public class ASyncTaskTest extends AsyncTask<String, Void, String> {
    
        private CallBackTask mcallbacktask;
    
        // バックグラウンドの処理。ここではTextViewの操作はできない。
        @Override
        protected String doInBackground(String... strings) {
            return strings[0];
        }
    
        // doInBackgroundの処理が終了した後に呼ばれる。ここではTextViewの操作はできる。
        @Override
        protected void onPostExecute(String result) { mcallbacktask.CallBack(result); }
    
        public void setOnCallBack(CallBackTask t_object)
        {
            mcallbacktask = t_object;
        }
    
        // コールバック用のインターフェース定義
        interface CallBackTask
        {
            void CallBack(String result);
        }
    }
    

    우선은 콜백의 방법을 배운다.

    Sample_CallBack1.java
    public class MainActivity extends AppCompatActivity {
        TextView tw;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tw = (TextView)findViewById(R.id.textView);
    
            // 非同期タスク初期化
            ASyncTaskTest ak = new ASyncTaskTest();
    
            // コールバック設定
            ak.setOnCallBack(new ASyncTaskTest.CallBackTask() {
    
                @Override
                public void CallBack(String result) {
                    tw.setText(result);
                }
            });
            ak.execute("Sample_Callback1");    // 非同期タスクを実行。
        }
    }
    

    MainActivity에 implements ~를 기재하면,
    다시 전화 요청할 onCreate 밖으로 나가는 법을 배웁니다.

    Sample_CallBack2.java
    public class MainActivity extends AppCompatActivity implements ASyncTaskTest.CallBackTask{
        TextView tw;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tw = (TextView)findViewById(R.id.textView);
    
            // 非同期タスク初期化
            ASyncTaskTest ak = new ASyncTaskTest();
    
            // コールバック設定
            ak.setOnCallBack(this);
    
            ak.execute("Sample_CallBack2");    // 非同期タスクを実行。
        }
    
        @Override
        public void CallBack(String result) {
            tw.setText(result);
        }
    }
    

    마지막으로 비동기 처리를 반복하는 방법을 배웁니다.
    이어서 버튼을 누른 후의 처리도 onCreate 밖으로 내는 방법을 배운다.

    Sample_CallBack_Repeat.java
    public class MainActivity extends AppCompatActivity implements ASyncTaskTest.CallBackTask, View.OnClickListener {
        TextView tw;
        ASyncTaskTest ak = new ASyncTaskTest();
        Button button;
        Integer ii = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tw = (TextView)findViewById(R.id.textView);
            button = (Button)findViewById(R.id.button2);
    
            // クリアボタンセット。
            button.setOnClickListener(this);
    
            // コールバック設定
            ak.setOnCallBack(this);
            ak.execute(String.valueOf(ii)); // 非同期タスクを実行。
        }
    
        // 非同期タスクのコールバックが呼ばれるたびに処理を行う。
        @Override
        public void CallBack(String result) {
            tw.setText(result);
    
            ii++;
    
            // 再度非同期タスク設定して実行。
            ak = new ASyncTaskTest();
            ak.setOnCallBack(this);
            ak.execute(String.valueOf(ii));
        }
    
        @Override
        public void onClick(View v) {
            ii = 0;
            tw.setText(String.valueOf(ii));
        }
    }
    

    참고



    htps : // 이 m / 아 _에 시무라 / ms / 1548 02b96 bbd0d43 4
    h tp // w w. 키세-ぉgs. 코 m/2017/05/31/그럼

    좋은 웹페이지 즐겨찾기