我有一個目前的問題:我有一個應用程序,並希望把主線程睡1500ms顯示我可以顯示一個ProgressDialog,我不知道該怎麼做。可以停止應用程序主線程?我可以使用另一個線程實現相同的目標嗎?如何把應用程序主線程睡覺?
2
A
回答
4
停止主線程通常是一個壞主意,因爲它也會停止所有UI交互處理。
嘗試製作進度對話框模態。這將阻止用戶在用戶界面上執行任何操作,直到對話框消失。我認爲這將實現你想做的事情,並與Android的工作方式兼容
1
不要停止主UI線程!它會凍結用戶界面。我可以想象你在一些後臺操作過程中顯示進度對話框。完成此操作後,只需發佈一些內容以通過處理程序更新UI。
進度對話框的作用是在長時間執行的同時與用戶進行交互。否則,你甚至不需要後臺操作和進度對話框。你只需要在主UI線程中執行操作並等待UI解凍。
1
你所要求的應該是不必要的,正如Carsten所說,這是一個壞主意。這是一個基本規則,你不會中斷UI線程,也只會更新該線程上UI的元素。在顯示對話框及其任何子類的時候,後臺沒有任何東西會收到任何輸入,所以儘管主線程正在運行,但除了對話框中發生的事情之外,什麼都不應該發生。
你可能要做的是使用類似AsyncTask()的東西來顯示你的ProgressDialog,做一些工作,然後在工作完成時解僱它。
1
不是一個好主意,要做到這一點,但如果你有使用這個
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
//handle
}
0
要做到這樣的事情,你需要使用「的Runnable」與一起「處理程序」。正如其他人提到的,你不想停止主UI線程。由於只有一個,所以如果你讓它睡覺或等待,你將不會顯示任何更新。在另一個線程上查看運行代碼的下面的小樣本。
要做的主要事情是睡覺主線程意味着停止任何和所有的視覺更新。
// Class Variables
private Handler mHandler;
@Override
public void onCreate(){
// Create a Handler Object
// In Layman's terms, Handlers can run processes off the main
// User interface thread.
mHandler = new Handler();
// Post a "Runnable" after a delay in milliseconds
// On a separate thread, the progressDialog_Runnable
// will call the function "createProgressDialog"
mHandler.postDelayed(progressDialog_Runnable, 250);
}
// Runnables (Process to run on separate thread)
private Runnable progressDialog_Runnable;
{
progressDialog_Runnable = new Runnable(){
@Override
public void run() {
createProgressDialog();
}
};
}
// Method you create to make the progress dialog
private void createProgressDialog(){
//... Run this code on a separate thread via Runnable
}
相關問題
- 1. 睡覺應用程序
- 2. 如何把一個特定的線程睡覺()?
- 3. 如何把一個特定的線程睡覺
- 4. 如何睡覺一個C++ Boost線程
- 5. C#線程不會睡覺?
- 6. Java線程不睡覺
- 7. 睡覺後應用程序崩潰
- 8. 螺紋應用程序與其他應用程序睡覺
- 9. 如何「睡覺」飛鏢程序
- 10. 如何把應用程序放在睡眠模式
- 11. Java搖擺和線程睡覺
- 12. 線程不是真的在睡覺嗎?
- 13. 強制線程在睡覺時返回
- 14. 睡覺/在CUDA線程中等待
- 15. 睡覺一個新的線程c#
- 16. linux線程,主要睡眠
- 17. 把可運行的睡覺
- 18. 在iOS應用程序中顯示閃屏圖像,但主線程不在睡覺
- 19. 延遲程序就像睡覺()
- 20. 如何組織多線程與隊列和睡覺
- 21. 如何睡APR線程?
- 22. 使用從線程喚醒睡眠主線程
- 23. 如何迴應主線程?
- 24. 如何避免應用程序可以做它的主線程
- 25. 如何在iPhone應用程序的主線程中啓動新線程
- 26. 如何把iOS應用程序全屏
- 27. 可以睡覺(1)調用線程導致崩潰?
- 28. 防止線程從調用Socket.Receive時睡覺
- 29. JavaScript應用程序中的多線程錯覺
- 30. 調用一個線程睡眠睡我的所有線程(JAVA)
'Thread.sleep()'是一個靜態方法。如果'this'是'Thread',上面的代碼會編譯,但會導致當前線程進入休眠狀態,這可能與'this'不一樣。也就是說,你不能讓另一個線程以這種方式睡覺。這段代碼表明程序員認爲它使得'this'睡眠,因爲它被封裝在一個(無意義的)'synchronized'塊中。這不是一個好方法,但這不是實施這種不好方法的方法。 – 2012-07-22 22:10:31
我應該更具體一些,如果這是一項活動,那麼它會睡眠並阻止活動的UI達1500秒。 – Eshaan 2012-11-01 22:51:41
...只有當你在UI線程中調用這個。這段代碼的問題是寫'this.sleep'而不是'Thread.sleep'。看起來你正試圖讓一個特定的線程休眠,當這不是該方法的功能時。 – 2012-11-02 10:04:44