-2
我收集到一個不好的做法,即從不是UI線程的線程調用finish()
。當某個事件(在渲染/循環線程中計算)發生時,我需要結束一個活動。在後臺線程上結束活動
根據對類似問題的回答,使用Handler發佈請求以在UI線程上完成活動將是適當的。我試圖做到這一點,但活動從未結束 - 發佈前我必須做些什麼,或者我應該使用完全不同的方法? 。在(循環)線程,他們在實例被創建
我收集到一個不好的做法,即從不是UI線程的線程調用finish()
。當某個事件(在渲染/循環線程中計算)發生時,我需要結束一個活動。在後臺線程上結束活動
根據對類似問題的回答,使用Handler發佈請求以在UI線程上完成活動將是適當的。我試圖做到這一點,但活動從未結束 - 發佈前我必須做些什麼,或者我應該使用完全不同的方法? 。在(循環)線程,他們在實例被創建
處理程序默認情況下,爲了確保處理程序是主UI線程上,你可以這樣做:
Handler myHandler = new Handler(Looper.getMainLooper());
然後,發佈項目到主線程,創建一個實現Runnable
接口的類然後發佈到處理程序。
myHandler.post(new Runnable() {
@Override
public void run() {
// Code to run on UI thread.
}
});
另一個方便的花花公子技巧是,你可以張貼到View
這是你的活動可見。例如你的根視圖。
View myView = findViewById(R.id.myViewId);
Runnable runnableObject = new MyRunnableObject();
myView.post(runnableObject);
有些事情要注意這一點。發佈到視圖的所有內容都將在UI線程上運行。發佈到Views
的項目將不會執行,直到View
位於查看樹上。您可以將Runnables發佈到您的View
,然後他們都會發射第二個View
對用戶可見。還應該注意的是,取消發佈到視圖的Runnable
並不是特別容易。他們在內部使用Handler,但remove____()
方法被抽象出來。
顯示您的代碼。和LogCat,如果發生任何錯誤.. – SilentKiller
我想知道downvote這個完全有效的問題的原因。有人請賜教。 –