安卓用户界面非常慢



我正在创建一个简单的应用程序,它将流式传输互联网广播电台。因此,当用户点击播放按钮时,我想显示一个进度条(加载圆圈),直到播放流。

我有两个Runnable,一个用来显示进度条,另一个用来加载音频流并播放。这是一个进度条可运行:

private Runnable showProgressBar = new Runnable() {
    @Override
    public void run() {
        progBar.setVisibility(View.VISIBLE);
    }
};

然后点击按钮:

buttonPlay.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Handler show_progress_h = new Handler();
        show_progress_h.post(showProgressBar);
        Handler play_h = new Handler();
        play_h.post(startPlayingThread);
    }
});

但是。。。进度条加载的内容太多了。它是在收音机快满的时候加载的,所以你只会看到它一眨眼。点击按钮后是否可以立即显示?我不知道是什么让它慢下来了。我应该使用其他东西而不是Handler吗?

哦,顺便说一句…我也在没有处理程序的情况下尝试了这两种方法,但结果是一样的。

问题是在显示progressbar:后,您立即在UI线程上发布长时间运行的任务

buttonPlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    Handler show_progress_h = new Handler();
    show_progress_h.post(showProgressBar);
    Handler play_h = new Handler();
    play_h.post(startPlayingThread);//<< issue is here
}
});

相反,做一些类似的事情:

buttonPlay.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
            Handler show_progress_h = new Handler();
            show_progress_h.post(showProgressBar);
            new AsyncTask<Void, Void, Void>(){
                 @Override
                 protected void doInBackground(Void v){
                 // perform long runningtask here that you are performing in 
                 //startPlayingThread
                 } 
           }.execute();
    }
});

有关更多详细信息,请查看本教程:http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html#concurrency_asynchtask

您可以使用new Thread(your_runnable).start()作为替代方案,并尝试调试它。

最新更新