0
Android에 익숙하지 않아 원격 응답을 기다리는 동안 UI를 차단하는 가장 좋은 방법을 알고 싶습니다.Android가 원격 응답을 기다림
내 문제는 장치에 메시지를 보내고 답변을 얻을 때까지 UI를 차단하려는 것입니다. 아무 것도 계산할 필요가 없기 때문에 비동기 작업을 사용하는 방법을 모르겠습니다. 백그라운드에서 기다리십시오.
아이디어가 있으십니까?
Android에 익숙하지 않아 원격 응답을 기다리는 동안 UI를 차단하는 가장 좋은 방법을 알고 싶습니다.Android가 원격 응답을 기다림
내 문제는 장치에 메시지를 보내고 답변을 얻을 때까지 UI를 차단하려는 것입니다. 아무 것도 계산할 필요가 없기 때문에 비동기 작업을 사용하는 방법을 모르겠습니다. 백그라운드에서 기다리십시오.
아이디어가 있으십니까?
이것은 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>
덕분에, "활성"대기 .. 서버 또는 다운로드와 UI 전까지 작업을 차단합니다? – user1544128
예, 활성화 대기 중입니다. – Riser