如何在死线程上向Handler发送消息

时间:2014-06-24 14:40:43

标签: android runtimeexception android-handler

我有一个启动和停止作业方法,用于检查我的连接是否得到维护。这适用于软电话应用程序,因此只要用户打开了应用程序,就需要打开连接。这些方法的代码如下

public void startJob(){
    mJobThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted() && Thread.currentThread().isAlive()) {
                try {
                    Thread.sleep(7000);
                    mJobHandler.post(myJobRunnable);
                } catch(InterruptedException e){
                    System.out.println("startJob Interrupt Runnable");
                    Thread.currentThread().interrupt();
                    return;
                } catch (Exception e) {
                    Log.v("startJob Runnable", e.getLocalizedMessage());
                }
            }
        }
    });
    mJobThread.start();
}

public void stopJob(){
    if(mJobHandler != null){
        mJobHandler.removeCallbacks(myJobRunnable);
    }
    if(mJobThread != null) {
        mJobThread.interrupt();
    }
}

我得到的问题是RuntimeException(没有任何崩溃的应用程序)说

W/MessageQueue( 1946): java.lang.RuntimeException: Handler (android.os.Handler) {421ac808} sending message to a Handler on a dead thread
W/MessageQueue( 1946):  at android.os.MessageQueue.enqueueMessage(MessageQueue.java:309)
W/MessageQueue( 1946):  at android.os.Handler.enqueueMessage(Handler.java:623)
W/MessageQueue( 1946):  at android.os.Handler.sendMessageAtTime(Handler.java:592)
W/MessageQueue( 1946):  at android.os.Handler.sendMessageDelayed(Handler.java:563)
W/MessageQueue( 1946):  at android.os.Handler.post(Handler.java:323)
W/MessageQueue( 1946):  at com.zxd.activity.Manager$5.run(Manager.java:256)
W/MessageQueue( 1946):  at java.lang.Thread.run(Thread.java:841)

第256行是try{中的startJob。我在用户登录时调用startJob,在用户注销时调用stopJob。我有一个服务,有时会建立连接,但不会调用startJobstopJob

为什么我会收到此异常,我该怎么做才能解决此问题?

0 个答案:

没有答案