簡體   English   中英

Android UI非常慢

[英]Android UI very slow

我正在創建一個簡單的應用程序,它將流式傳輸互聯網廣播電台。 因此,當用戶單擊播放按鈕時,我想顯示一個進度條(加載圓圈),直到播放流。

我有兩個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

您可以使用新的Thread(your_runnable).start()作為替代,然后嘗試調試它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM