我正在尝试制作一个监控网络连接的程序,该程序显示状态和带宽并每秒刷新一次。昨天我了解到网络监控发生在我创建的辅助线程上;现在可以了。
我相信让程序每秒刷新一次,我执行一个 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'