2012-08-05 3 views
2

좋아, 여기 내 문제가 있습니다. 장기 실행 작업을 처리하기 위해 AsyncTask, 스레딩 및 처리기를 배우고 싶습니다. Android 쿡 북 및 New Boston Android 튜토리얼을 사용했지만 제대로 작동하지 않습니다.장기 실행 프로세스를 처리하기 위해 Android 스레딩

진행률 표시 줄 메시지를 변경해야합니다. 이것은 프로젝트를위한 것이 아니라 스레딩을 배우는 것입니다. 스레딩은 정말 어렵습니다. 따라서 스레딩을 이해하는 데 도움이되는 안내서 또는 가이드가 있다면 알려주십시오.

한편 Handler 클래스를 시도했지만 작동하지 않았습니다. 그래서 AsyncTask를 시도했다. 그러나 그것도 작동하지 않습니다.

여기 내 코드입니다.

package com.example.androidpopup; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends Activity { 

    Button click_btn; 
    ProgressDialog dialog; 

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

     click_btn = (Button) findViewById(R.id.button1); 

     click_btn.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 
       dialog = ProgressDialog.show(MainActivity.this, "", 
         "Recording...", true); 
       dialog.setCancelable(true); 
       Thread thread = new Thread(){ 
        public void run(){ 
         try{ 
          sleep(2000); 
          new UpdateUI().execute("testing"); 
         }catch(InterruptedException e){ 
          e.printStackTrace(); 
         } 
        } 
       }; 
      } 
     }); 
    } 

    public class UpdateUI extends AsyncTask<String, Integer, String>{ 

     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      return "Searching"; 
     } 

     protected void onPreExecute(String f){ 
      //example of setting up something 
      f = "whatever"; 
     } 

     protected void onProgressUpdate(Integer...progress){ 

     } 

     protected void onPostExecute(String result){ 
      dialog.setMessage(result); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

내 접근 방식의 문제점을 누구든지 설명 할 수 있다면 정말 도움이 될 것입니다.

감사합니다.

+2

어떻게 작동하지 않습니까? 더 설명하기 쉽도록하십시오. – JoxTraex

+0

메시지를 변경하지 않습니다. 나는 디버그 코드를 삽입하는 방법을 모른다. –

+1

Thread에서 파생 된 클래스를 정의해야합니까 (클래스 MyThread가 Thread를 확장합니까)? Thread.start() 호출이 어딘가에 있지 않아야합니까? –

답변

3

왜 AsyncTask를 호출하기 위해 2 초 정도 기다리는 새 스레드를 만드시겠습니까? 내가 그 스레드를 제거하는 것이 좋습니다, 일반적으로 AsyncTask를 호출하고 내부 Thread.sleep (....).

뭔가 같은 :

protected void onPreExecute(String f){ 
    Thread.sleep(2000); 
    //example of setting up something 
    f = "whatever"; 
} 

PS : 스레드를 실행하기 위해, 당신은 thread.start 호출해야합니다. ;)

관련 문제