【发布时间】:2014-06-14 22:49:48
【问题描述】:
我对此感到很困惑。我正在接受this Coursera course,并正在处理Assignment 5。我能够以最小的困难完成任务,然后继续尝试使代码达到我自己的目的。我也对其进行了一些调整,但我遇到了一个重大问题,我终生无法弄清楚。处理程序似乎根本不接收消息......知道我做错了什么吗?
这是我的一些代码。如果你还有什么想看的,请告诉我。
处理程序:
public class DownloadHandler extends Handler {
private WeakReference<Context> mContext;
public DownloadHandler(Context context) {
super();
mContext = new WeakReference<Context>(context);
Log.v(TAG,"Created! "+this);
}
// Handle any messages that get sent to this Handler
@Override
public void handleMessage(Message msg) {
Log.v(TAG, "" + msg); //Never reached
...
}
}
在我继续之前,我已经通过发送一个简单的消息 (handler.sendEmptyMessage(0);,没有成功。有什么想法吗?
Log.v(TAG,"handler="+handler);
Log.v(TAG,"Sending test "+handler.sendEmptyMessage(0));
还有日志猫:
06-14 22:47:34.700: V/DownloadAddOnProducts(7406): handler=Handler (com.kd7uiy.hamfinder.DownloadHandler) {527724dc}
06-14 22:47:34.700: V/DownloadAddOnProducts(7406): Sending test true
为了进一步减少这种情况,我进行了单元测试:
public class DownloadTester extends InstrumentationTestCase {
public void setUp() {
targetContext=getInstrumentation().getTargetContext();
}
public void testDownloadHandler() {
Looper.myLooper().setMessageLogging(new LogPrinter(Log.VERBOSE,"DownloadLooper"));
DownloadHandler handler=new DownloadHandler(targetContext,Looper.myLooper());
Log.v(TAG,"handler="+handler);
handler.sendEmptyMessage(0);
Log.v(TAG,"Send empty message");
}
logcat 显示:
06-14 23:03:46.068: V/DownloadHandler(8337): Created! Handler (com.kd7uiy.hamfinder.DownloadHandler) {52770be8}
06-14 23:03:46.068: V/DownloadHandler(8337): Created! Handler (com.kd7uiy.hamfinder.DownloadHandler) {52770f60}
06-14 23:03:46.068: V/DownloadTester(8337): handler=Handler (com.kd7uiy.hamfinder.DownloadHandler) {52770f60}
06-14 23:03:46.068: V/DownloadTester(8337): Send empty message
它创建了两个 DownloadHandler,因为另一个用于我的单元测试集中的另一个单元测试。
【问题讨论】:
-
处理程序在哪里声明?
-
“没有成功”是什么意思?你的意思是你从来没有看到来自
handleMessage()的日志? -
您在何处、何时以及如何实例化
Handler? -
您是否进行了任何测试以确保处理程序确实被分配?也许显示您在问题中实例化处理程序的工作流程,以提供更多线索。
-
您的处理程序在 Activity 上下文中创建时是否工作?