ProgressDialogを使ってみる。

ProgressDialogを使用してみましょう。

ProgressDialogは何かを読み込む時や通信を行う時に処理の進捗を伝える事に利用をします。

ただ、ProgressionDialogでは処理を行う際に一時的なものではなく、開始や終了など、

数秒にわたっての処理になるために、アプリが停止した場合などの処理を考えておく必要があります。

progressbar

つまり、読み込み完了後に負荷のかかる動作であれば一度読み込みをキャンセルした方がいいし、

読み込みが完了したら、次(にアプリ立ち上げ時)からその データを利用できるようにしたいのであれば、処理を継続するべきです。

 

ですが、ユーザーがその動作を取りやめているので、

キャンセルにして次回に立ち上げ た際にはキャンセルされた状態からスタートとなるのがよいようです。

 

今回はprogressの管理にThreadを用いて、擬似的にprogressを行います。

Threadの使い方

 

progressPracticeというprojectを作成してください。

今回は、stringをいくつか利用をするので、projectを作成した際にデフォルトで存在している定数を利用して作成をします。

Threadにはrunnableを設定する事でthread内で動作するファンクションを設定できます。

 

package in.andante.android.progress;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;

public class ProgressPractice extends Activity {
 
 private ProgressDialog _dialog;
 private Thread _thread;
 private Runnable _runnable;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 
 _runnable = new Runnable() {
 @Override
 public void run() {
 // TODO Auto-generated method stub
 for(int i =0 ; i < 100 ; i++){
 if(_thread == null)return;
 try{
 Thread.sleep(100);
 }catch(Exception e){}
 _dialog.incrementProgressBy(1);
 }
 _dialog.dismiss();
 _thread = null;
 }
 };
 startProgress();
 }
 
 private void startProgress(){
 _dialog = new ProgressDialog(this);
 _dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 _dialog.setTitle(R.string.app_name);
 _dialog.setMessage(getString(R.string.hello));
 _dialog.setCancelable(false);
 _dialog.setMax(100);
 _dialog.setProgress(0);
 _dialog.show();
 
 _thread = new Thread(_runnable);
 _thread.start();
 }
 
 public void onPause(){
 super.onPause();
 _dialog.dismiss();
 _thread = null;
 }
}

上記の形で、100ミリ秒に一度1%ずつ伸びていきます。

 _dialog.setMax(100);
 _dialog.setProgress(0);

上記で、最大の値の決定ができます。(下は最初の値)

 

また、

_dialog.incrementProgressBy(1);

で値を1%づつふやします。(正確にはMAX分の1)

_dialog.dismiss();

で処理を終わらせます。

 

今回は処理の最中に、閉じるや、他のアプリケーションが動くなどした場合(onPause)でこの処理を中断するように設定を行いました。

 

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑