2013-02-04 2 views
1

현재 상태에서 UI 스레드를 사용하므로이 프로그램에서 스레드를 사용하고 싶습니다. UI 스레드가 새로운 생성 된 스레드에 컨트롤을 전달하는 동안 UI 스레드를 사용하려면 다른 프로세스가 필요합니다.Android에서 스레드 사용

이 코드에서 스레드 구조를 사용하는 방법은 무엇입니까? AsyncTask 사용함으로써

public class Ping extends Activity implements OnClickListener 
{ 
    Button pingButton; 
    TextView pingText; 
    EditText pingCommand; 
    String address; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ping); 
    pingButton = (Button) findViewById(R.id.bPing); 
    pingCommand = (EditText) findViewById(R.id.tPingCommand); 
    pingText = (TextView) findViewById(R.id.tReturnResult); 
    pingButton.setOnClickListener(this); 
    } 

    public void ping() 
    { 
    try { 
     Process process = Runtime.getRuntime().exec("ping -c 8 " + address); 
     BufferedReader reader = 
      new BufferedReader(new InputStreamReader(process.getInputStream())); 
     int i; 
     char[] buffer = new char[4096]; 
     StringBuffer output = new StringBuffer(); 
     while ((i = reader.read(buffer)) > 0) { 
     output.append(buffer, 0, i); 
     pingText.setText(output); 
     } 
     reader.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

    @Override 
    public void onClick(View arg0) { 
    address = pingCommand.getText().toString(); 
    ping(); 
    } 
} 

답변

0

:

public YourTask extends AsyncTask<Object,Object,Object>{ 

    protected void doInBackground(Object o){ 
     ping(); 
    } 
} 

@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    address = pingCommand.getText().toString(); 
    // int packetNum = packetNumber.getId(); 
    // ping(address,packetNum); 
    new YourTask().execute(); 
} 
0

이것을 시도 :

new Thread(new Runnable(){ public void run(){ 
    try { 
     address = pingCommand.getText().toString(); 
     int packetNum = packetNumber.getId(); 
     ping(address,packetNum); 
     ping(); 
     Thread.sleep(5000); 
     dialog.dismiss(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
}).start() 
0

runOnUiThread

사용 시도 UI 스레드에 지정된 동작을 실행. 현재 스레드가 UI 스레드 인 경우 작업이 즉시 실행됩니다. 현재 스레드가 UI 스레드가 아닌 경우, 작업은 UI 스레드의 이벤트 대기열에 게시됩니다.

runOnUiThread(new Runnable(){ 
    @Override 
    public void run(){ 
     // change UI elements here 
     //ping() 
    } 
});