进度条运行时冻结后台活动

时间:2012-12-19 11:48:03

标签: android

我在我的app中面临一个问题。实际上,有一个活动我将图像发送到server.In 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 个答案:

答案 0 :(得分:0)

如果你想在做其他事情时“冻结”活动,那么适当的模式就是使用AlertDialog。将进度条放在对话框上,只要操作完成,就关闭对话框。

但请记住,使用时可以随时点击主页按钮,这会给你带来额外的麻烦。

答案 1 :(得分: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>

答案 2 :(得分:-1)

你不能。

'冻结后台活动'是UI线程,如果您尝试停止UI线程,您将导致ANR(活动无响应),并且用户可以选择强制关闭您的应用。

如果你想要停止你的说法是“仍然在移动”,那么你应该在你的onClick方法中执行此操作,同时显示对话框并将其解除。一个简单的解决方案是启动一个包含进度对话框和白色背景的新活动。然后,活动生命周期为您完成大部分工作。

或者将ProgressBar放在对话框中,即ProgressDialog,并将其显示给用户。这称为模态对话框。

答案 3 :(得分:-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();