android - 在 android 为什么我的 ProgressBar 卡住?

标签 android progress-bar

我在从服务器检索数据时显示进度条,在从服务器检索数据后在图表上显示该数据,但在图表上绘制该数据时我的进度条卡住,有人知道为什么会这样吗? .....

提前致谢...

private ProgressDialog pd;
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {        
        Toast.makeText(context, "Please Wait...", Toast.LENGTH_LONG).show();
        Thread t = new Thread(new Runnable() {              
            @Override
            public void run() {
                functionDrawMyData();/*in this function i am accessing activity view and drawing data on that view at time of drawing my Progress bar Freezes */
            }
        });
        runOnUiThread(t);
        pd.dismiss();           
    }
};  

我正在使用的这个处理程序在检索数据完成后调用 然后单击按钮我正在获取数据并显示进度条

ImageButton myButton = (ImageButton) findViewById(R.id.myBtn);
pair1ChartButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {               
                pd = ProgressDialog.show(v.getContext(),"Please wait...","Retrieving data ...",true,
                        true,
                        new DialogInterface.OnCancelListener(){
                            @Override
                            public void onCancel(DialogInterface dialog) {

                            }
                        });
                Thread t = new Thread(new Runnable() {                      
                    @Override
                    public void run() {
                            getDataFromServer();//calling function to get data from server
                        handler.sendEmptyMessage(0);                    
                    }
                });
                t.start();
        }
    });

最佳答案

请记住,android 在内存中保留了对 dilog 的引用。这样就不需要一次又一次地重新创建它。所以进度对话框第一次工作正常但下次挂起/卡住。

注意: android 不会清除 dilog 的内存引用,即使在关闭它们之后也是如此。

Activity 类中有一个名为removeDialog(int id) 的方法,这也会清除内存引用。

这是显示和删除对话框的方法

protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        switch(id){
          case 0:{
             dialog = ProgressDialog.show(this, "", 
                    "Loading. Please wait...", true);
             return dialog;
          }
             }

        return super.onCreateDialog(id);
    }

现在只需调用 showDialog(0) 来显示对话框并调用 removeDialog(0) 来隐藏它。

关于android - 在 android 为什么我的 ProgressBar 卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8322311/

相关文章:

c# - 如何在来自 View 模型的异步 Web 客户端调用中使用进度条

c++ - Boost::Asio 在使用异步操作时传输字节

java - 使用 fxml (scenebuilder) 制作的进度条来使用方法中的值

android - file.canWrite() 说 "true"但我不能在可移动存储上写入 (kit kat)

android - 为什么 Android Asset Studio 会剪切我的矢量图像?

安卓用户界面问题

android - 试图让一个安卓应用程序调用一个号码

java - 转换结果 HttpPost android 时出错

javascript - 如何从 XMLHttpRequest 获取进度

java - 实现 java FixTreadPool 状态监听器