0

アプリで問題に直面しています。実際には、サーバーに画像を送信するアクティビティがあります。xml レイアウト ファイルでは、プログレス バー ビューを使用します。問題は、進行状況バーが実行状態にあるときにバックグラウンド アクティビティがまだアクティブであることです。進行状況バーが実行状態にある間、バックグラウンド アクティビティをフリーズしたいです。

postPic.setOnClickListener(new View.OnClickListener() {

        @Override 
        public void onClick(View v){


        mProgressBar.setVisibility(View.VISIBLE);


                new Thread(){

                @Override
                public void run() {


                //here the code to post image to server 

                    handler.sendEmptyMessage(0);


                }


            }.start();
            }

        }

        private  Handler handler = new Handler() {
             @Override
             public void handleMessage(Message msg) {
                 try {


                     mProgressBar.setVisibility(View.GONE);


                        }

                      else  if(messagePostingItems.equalsIgnoreCase("Success")){

                        startActivity(new Intent(PostPhoto.this,PostPicDialog.class));

                     }
            };
    });

この問題から私を助けてください。

4

4 に答える 4

0

何か他のことをしている間にアクティビティを「フリーズ」したい場合の適切なパターンは、AlertDialog を使用することです。ダイアログに進行状況バーを配置し、アクションが完了するたびにダイアログを閉じます。

ただし、ユーザーはいつでもホームボタンをクリックできることを忘れないでください。これにより、さらに頭が痛くなります。

于 2012-12-19T12:02:05.177 に答える
0

最後に私はそれをやった.同じ問題に直面している人々、私の解決策は間違いなく彼らを助けるでしょう. アクティビティ クラスで Dialog クラスのオブジェクトを作成するだけです。

Dialog mdialog=new Dialog(this);

    mdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    mdialog.setContentView(R.layout.custom_progress_dialog);
    mdialog.getWindow ().setBackgroundDrawableResource (android.R.color.transparent);


    mdialog.show();

custom_progress_dialog は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">


<ProgressBar
    android:id="@+id/pbCustomDialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="visible" />

</LinearLayout>
于 2012-12-19T12:54:31.663 に答える
-1

たとえば、AsyncTask..... を使用します。

private class abc extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
                    //start the progress dialog
    }

    protected void onPostExecute(String s) {
        //dismiss the dialog
    }

    @Override
    protected String doInBackground(Void... params) {
        // TODO Auto-generated method stub
        //send image to server code
        return null;
    }
}

そして、あなたの onCreate() メソッド呼び出しで

new abc().execute();
于 2012-12-19T12:08:23.893 に答える
-1

できません。

「バックグラウンド アクティビティのフリーズ」は UI スレッドです。UI スレッドを停止しようとすると、ANR (Activity Not Responding) が発生し、ユーザーはアプリを強制終了することができます。

ただし、あなたの発言が「まだ動いている」ということを止めたい場合は、ダイアログを表示して閉じると同時に、onClick メソッドでこれを行う必要があります。簡単な解決策の 1 つは、進行状況ダイアログと白い背景を含む新しいアクティビティを開始することです。次に、アクティビティのライフサイクルがほとんどの作業を行います。

または、ProgressBar をダイアログ、つまりProgressDialogに入れて、これをユーザーに表示します。これをモーダル ダイアログと呼びます。

于 2012-12-19T12:02:23.870 に答える