[英]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.