我試圖製作一個監視網絡連接的程序,一個顯示狀態和帶寬並每秒刷新一次的程序。昨天我瞭解到,網絡監控發生在我創建的輔助線程上;它現在可以工作。Thread.sleep導致android程序崩潰
我相信每秒鐘都會刷新程序,我做了一個while循環,其中while條件總是「真」,while循環結束時我「嘗試」一個Thread.sleep( 1000)。
我有一個問題和一個問題。
問題:我有可能淹沒我的程序嗎?我覺得通過設置secondaryThread = null,在while循環期間創建的所有數據都會被垃圾回收,但我不確定是否屬於這種情況。
問題:當我運行這個程序時,我收到一條消息:「[程序]已經意外退出」......導致我認爲我的確在淹沒程序。有沒有辦法解決這個問題?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int linkSpeed = -1;
TextView textView = new TextView(this);
while (true)
{
SecondaryThread secondaryThread = new SecondaryThread(this);
new Thread(secondaryThread).start();
linkSpeed = secondaryThread.getLinkSpeed();
secondaryThread = null;
// Create the text view
textView.setTextSize(25);
textView.setText("linkspeed = " + linkSpeed);
// Set the text view as the activity layout
setContentView(textView);
try {
Thread.sleep(1000);
}
catch (Exception e) {
textView.setTextSize(25);
textView.setText("oh shit");
}
}
LogCat跟蹤堆棧說,一切運行良好,即使這不是實際情況。具體來說,它說以下...
06-27 15:07:58.069: D/gralloc_goldfish(1312): Emulator without GPU emulation detected.
06-27 15:41:45.879: I/dalvikvm(1919): threadid=3: reacting to signal 3
06-27 15:41:45.958: I/dalvikvm(1919): Wrote stack traces to '/data/anr/traces.txt'
的logcat的消息(反應信號3,寫堆棧跟蹤)不必然表明一個問題。這僅僅意味着系統中的某些人認爲從過程1919中抓取堆棧跟蹤(可能是ANR檢測器預熱)會很有用。查看日誌中的其他地方,查看過程中死亡的原因 - 搜索最後一次出現的「1919」並查看附近。 – fadden