ページ間のスムーズなジャンプとパッケージング

3620 ワード

Androidアプリケーション開発では、複数のインタフェース(Activity)が含まれ、1つのアプリケーションを構成することが多い.しかし、ページ間ではジャンプが必要になることがよくあります.ジャンプ中には、次のような一般的な問題があります.
1、ジャンプのインタフェース、すなわち第2のActivityの実行は一定のシステムリソースと時間を消費し、その前にページが表示されない(黒い画面).リソース消費量の少ないページでは許容できますが、大量のリソース消費による長時間のブラックスクリーンでは、ユーザーの友好性が大幅に低下します.
2、ユーザーの友好性を高めるために、1つの実行可能な方法は、非同期タスク(AsyncTask)と待機プロンプトを組み合わせて、ユーザーシステムが実行中であることを伝えることである.しかし、どのようにして共通のモデルをカプセル化し、供給用プログラムを使用しますか?
ここでは、一例を用いて説明する.その中の核心の思想の時非同期の任務、つまりAsyncTaskは1つの背景Threadをスタートさせて、そして仕事が完成する時制御権をUI Threadに返します.例:
まず、バックグラウンド実行とUI更新の実行インタフェース、Excutionを定義する.java
public interface Excution {
	void longExcute();
	void uiUpdate();
}

longExcute()メソッドは長時間のバックグラウンド操作を定義し、uiUpdate()メソッドはバックグラウンド操作が完了した後の呼び出し方法を定義し、UIメインインタフェースを更新します.次に、AsyncTaskオブジェクトを継承してLongOperationオブジェクトを構築し、サブExcutionオブジェクトを構築してActivityから取り込む.バックグラウンドの長時間操作が必要な場合はlongExcute()メソッドをコールバックし、バックグラウンド操作が完了したらuiUpdate()メソッドをコールバックします.バックグラウンドで実行する過程で,システムのヒントかごはProcessDialogオブジェクトにカプセル化される.
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;


public class LongOperation extends AsyncTask{

		private static final String TAG = "LongOperation";
		private ProgressDialog dialog; 
		private Context context;
		private Excution excution; 		
		private boolean showDialog = true;
		
		public LongOperation(Context context,final Excution excution){
			
			this.context = context;
			this.excution = excution;
			showDialog = true;
		}
		
		public LongOperation setShowDialog(boolean showDialog){
			this.showDialog = showDialog;
			return this;
		}
		
		@Override
		protected String doInBackground(String... params) {
			// perform long running operation operation
			Log.d(TAG,"doInBackground()");
			excution.longExcute();
		    return null;
		}

		@Override
		protected void onPostExecute(String result) {
			// execution of result of Long time consuming operation
			Log.d(TAG,"onPostExecute()");
			try{
                if(showDialog){
                    dialog.dismiss();
                } 
                dialog = null;
                excution.uiUpdate();
            }catch(Exception e){
            }
		}


		@Override
		protected void onPreExecute() {
			// Things to be done before execution of long running operation. For example showing ProgessDialog
			Log.d(TAG,"onPreExecute()");
			if(showDialog){
				dialog = new ProgressDialog(context);
				 dialog.setMessage("Loading");
				 dialog.setTitle("Please wait...");
				 dialog.show();
			}     
		}


		@Override
		protected void onProgressUpdate(Void... values) {
			// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
			Log.d(TAG,"onProgressUpdate()"); 
		}
		
		public interface Excution {
			void longExcute();
			void uiUpdate();
		}
		

}

以上の2つのステップを経て、パッケージは基本的に終了し、次のフラグメントコードのようにActivityで簡単に呼び出すことができます.
@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		new LongOperation(this, new Excution() {
			@Override
			public void longExcute() {
				//get data
			}

			@Override
			public void uiUpdate() {
				setContentView(R.layout.userinfo);
				//set data to UI
			}
		}).execute(new String[] {});

	}

拡張と思考:1、読者は自分の必要に応じてポップアップボックスのスタイルを修正したり、Viewをカスタマイズしたりすることができ、多くのスタイルがあれば、これは構造子を通じて伝わることができます.2、もしかごを弾き出す必要がないならば、setShowDialog(false)の方法を設定することによって完成することができて、これはページがジャンプしないで、しかしバックグラウンドの操作が必要で、同時にUIをブロックしない時特に役に立つ