2013-06-08 2 views
0

Android에 익숙하지 않아 원격 응답을 기다리는 동안 UI를 차단하는 가장 좋은 방법을 알고 싶습니다.Android가 원격 응답을 기다림

내 문제는 장치에 메시지를 보내고 답변을 얻을 때까지 UI를 차단하려는 것입니다. 아무 것도 계산할 필요가 없기 때문에 비동기 작업을 사용하는 방법을 모르겠습니다. 백그라운드에서 기다리십시오.

아이디어가 있으십니까?

답변

1

이것은 asyncTask의 예입니다. 이는

AsyncTaskActivity

package com.javasrilankansupport.asynctask; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.app.Activity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 


public class AsyncTaskActivity extends Activity { 

Button btn_start; 
ProgressBar progressBar; 
TextView txt_percentage; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_async_task); 

     btn_start = (Button) findViewById(R.id.btn_start); 
     progressBar = (ProgressBar) findViewById(R.id.progress); 
     txt_percentage= (TextView) findViewById(R.id.txt_percentage); 

     btn_start.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    btn_start.setEnabled(false); 
    new ShowDialogAsyncTask().execute(); 
    } 
    }); 
    } 


    private class ShowDialogAsyncTask extends AsyncTask<Void, Integer, Void>{ 

    int progress_status; 

    @Override 
    protected void onPreExecute() { 
    // update the UI immediately after the task is executed 
    super.onPreExecute(); 

    Toast.makeText(AsyncTaskActivity.this, 
      "Invoke onPreExecute()", Toast.LENGTH_SHORT).show(); 

    progress_status = 0; 
    txt_percentage.setText("downloading 0%"); 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 

    while(progress_status<100){ 

    progress_status += 2; 

    publishProgress(progress_status); 
    SystemClock.sleep(300); 

    } 
    return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
    super.onProgressUpdate(values); 

    progressBar.setProgress(values[0]); 
    txt_percentage.setText("downloading " +values[0]+"%"); 

    } 

    @Override 
    protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 

    Toast.makeText(AsyncTaskActivity.this, 
      "Invoke onPostExecute()", Toast.LENGTH_SHORT).show(); 

    txt_percentage.setText("download complete"); 
    btn_start.setEnabled(true); 
    } 
    } 
} 

activity_async_task.xml 수있는 유일한 방법은 만드는 것입니다, 그래서

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:padding="@dimen/padding_medium" 
     android:text="@string/async_task" 
     tools:context=".AsyncTaskActivity" /> 

    <ProgressBar 
     android:id="@+id/progress" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="34dp" /> 

    <Button 
     android:id="@+id/btn_start" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/progress" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="40dp" 
     android:minWidth="120dp" 
     android:text="@string/start_btn" /> 

    <TextView 
     android:id="@+id/txt_percentage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/progress" 
     android:text="downloading 0%" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 
+0

덕분에, "활성"대기 .. 서버 또는 다운로드와 UI 전까지 작업을 차단합니다? – user1544128

+0

예, 활성화 대기 중입니다. – Riser

관련 문제