【发布时间】:2011-01-18 09:15:07
【问题描述】:
我有一个带有两个线程的应用程序 - 主线程和数据加载器。当数据加载器完成时,它会将一个 Runnable 对象发布到主线程(如 DevGuide 中所述),但它永远不会被传递和运行。
这是基本代码:
class MyApp extends Application
{
public void onCreate()
{
LoaderThread t = new LoaderThread();
t.start();
}
private class LoaderThread extends Thread
{
public void run()
{
SystemClock.sleep(2000);
boolean res = m_handler.post(m_runnable);
if(res)
Log.d(TAG, "Posted Runnable");
}
}
private final Handler m_handler = new Handler();
private final Runnable m_runnable = new Runnable() {
public void run()
{
Log.d(TAG, "Hey, i'm runnable!");
}
}
}
还需要注意的是,我将此代码作为派生自 ApplicationTestCase 的单元测试运行:
class MyAppTest : public ApplicationTestCase
{
public MyAppTest()
{
super(MyApp.class);
}
public void testLoading()
{
createApplication();
// few asserts follow here...
}
}
所以这失败了。 Runnable 永远不会被调用 run(),尽管日志表明它已成功发布。 我还尝试发送简单消息而不是发布可运行消息(例如 m_handler.sendEmptyMessage(1))——它们永远不会被传递到主线程中的处理程序回调。
我错过了什么?
提前致谢:)
【问题讨论】:
标签: android user-interface multithreading