1

我陷入了以下有趣的问题:

private Object lock=new Object();

public void letsSayMain(){
    timer=new Timer();
    task=new RequestMessages();
    timer.schedule(task, FIRST_DELAY, period*60*1000); //period = 10, FIRST_DELAY=10*1000
}

private class RequestMessages extends TimerTask{
    public void run() {
        synchronized(lock){
             foo();
             Log.d(ApplicationConstants.APPLICATION_CLASS_NAME, "Yay, we've just exited the method!");    
        }
    }
    private void foo(){
        .
        .
        //Notification initialization
        .
        .

        Log.d(ApplicationConstants.APPLICATION_CLASS_NAME, "We've about to show the notification.");
        mNotificationManager.notify(z, notificationTransactions); //z is unique int, starting from 1. notificationTransaction - forged notification.
        Log.d(ApplicationConstants.APPLICATION_CLASS_NAME, "We've shoved the notification.");
    }
};

输出是:

07-09 05:23:50.864: DEBUG/AllApp(6919): We've about to show the notification.

就这样。

有人可以告诉我,在调用 mNotificationManager.notify() 之后,问题是什么,以及为什么线程代码的执行完成?
顺便说一句,计时器仍在运行,再过 10 分钟 - 它将再次执行该代码。计时器在它自己的线程中运行代码。我不知道,如果计时器线程终止然后立即重新启动,但似乎线程是完整的,但只执行顶级堆栈函数(它只是再次计数计时器)。

Android 也会显示通知。

我将 notify() 嵌入到 for 循环中,因此对我来说至关重要 - 在调用 mNotificationManager.notify() 之后继续执行它。

EDIT1:它真的看起来像一个无声的崩溃:

PathClassLoader(ClassLoader).loadClass(String) line: 532    
INotificationManager$Stub$Proxy.enqueueNotification(String, int, Notification, int[]) line: 157 
NotificationManager.notify(int, Notification) line: 94  
    .
    .
    .

下一步是单行:

Timer$TimerImpl.run() line: 294

在崩溃之前,

PathClassLoader(ClassLoader).loadClass(String, boolean) line: 563

重复执行了两次,但只是从 PathClassLoader(ClassLoader).loadClass(String) line: 532 的一行开始。在第二个出口处- 它回到 loadClass(String),下一刻 - 一切都消失了。

任何建议 - 我现在应该做什么?我以前从未遇到过无声的崩溃...

4

0 回答 0