2016-05-13 88 views
1

在我的提醒應用程序,如果我選擇哪一個剛剛去世的時間,然後點擊App不工作,得到以下錯誤:這不是下單模式,U不能使用它

登錄

D/ANRAppManager: !!! It is not under singleton mode, U can't use it. !!! 
05-13 10:55:19.934 22594-22600/com.mri I/dalvikvm: threadid=3: reacting to signal 3 
05-13 10:55:20.190 22594-22600/com.mri D/dalvikvm: JIT unchain all for threadid=1 
05-13 10:55:20.940 22594-22600/com.mri W/dalvikvm: threadid=3: spin on suspend #1 threadid=1 (pcf=0) 
05-13 10:55:20.940 22594-22600/com.mri E/dalvikvm: Fatal spin-on-suspend, dumping threads 
05-13 10:55:20.940 22594-22600/com.mri I/dalvikvm: DALVIK THREADS: 
05-13 10:55:20.940 22594-22600/com.mri I/dalvikvm: (mutexes: tll=1 tsl=1 tscl=0 ghl=0) 
05-13 10:55:20.940 22594-22600/com.mri I/dalvikvm: "main" prio=5 tid=1 RUNNABLE JIT 
05-13 10:55:20.940 22594-22600/com.mri I/dalvikvm: | group="main" sCount=1 dsCount=0 obj=0x4191cde0 self=0x418328b8 
05-13 10:55:20.940 22594-22600/com.mri I/dalvikvm: | sysTid=22594 nice=0 sched=0/0 cgrp=apps handle=1074880900 
05-13 10:55:20.941 22594-22600/com.mri I/dalvikvm: | state=R schedstat=(133450832707 8412096123 56516) utm=13019 stm=326 core=0 
05-13 10:55:20.941 22594-22600/com.mri I/dalvikvm:  at com.mri.reminders.AlarmReceiver.setRepeatAlarm(AlarmReceiver.java:~115) 
05-13 10:55:20.941 22594-22600/com.mri I/dalvikvm:  at com.mri.reminders.ReminderAddActivity.saveReminder(ReminderAddActivity.java:963) 
05-13 10:55:20.941 22594-22600/com.mri I/dalvikvm:  at com.mri.reminders.ReminderAddActivity.onOptionsItemSelected(ReminderAddActivity.java:1172) 
05-13 10:55:20.942 22594-22600/com.mri I/dalvikvm:  at android.app.Activity.onMenuItemSelected(Activity.java:2633) 
05-13 10:55:20.945 22594-22600/com.mri I/dalvikvm:  at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361) 
05-13 10:55:20.945 22594-22600/com.mri I/dalvikvm:  at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147) 
05-13 10:55:20.945 22594-22600/com.mri I/dalvikvm:  at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) 

這裏是我使用AlarmReceiver.java

public void setRepeatAlarm(Context context, Calendar calendar, int ID, long RepeatTime) { 
     mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

     // Put Reminder ID in Intent Extra 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     intent.putExtra(ReminderEditActivity.EXTRA_REMINDER_ID, Integer.toString(ID)); 
     mPendingIntent = PendingIntent.getBroadcast(context, ID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

     // Calculate notification timein 
     Calendar c = Calendar.getInstance(); 
     long currentTime = c.getTimeInMillis(); 
     long diffTime = calendar.getTimeInMillis() - currentTime; 

     while(diffTime < 0) { 
      diffTime += RepeatTime; // at this line getting error 
     } 

     // Start alarm using initial notification time and repeat interval time 
     mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
       SystemClock.elapsedRealtime() + diffTime, 
       RepeatTime , mPendingIntent); 

     // Restart alarm if device is rebooted 
     ComponentName receiver = new ComponentName(context, BootReceiver.class); 
     PackageManager pm = context.getPackageManager(); 
     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 
    } 

我該如何解決這個問題,它的代碼?

回答

2

我認爲反應信號3是一個ANR的症狀。崩潰之前應用程序是否掛起?如果是這樣,那可能是因爲循環永遠不會結束。

你確定RepeatTime總是> 0(特別是不是= 0)嗎?

喜歡的東西:

while(diffTime < 0) { 
     Log.d("SOME_TAG", "set diffTime to " + diffTime); 
     diffTime += RepeatTime; // at this line getting error 
    } 

不應超過幾行顯示更多。

更新:

您應該確保無論是報警在未來重複時間大於0

if (diffTime > 0 || RepeatTime > 0) { 

     // set the alarm only if the parameters are consistents 

     while(diffTime < 0) { 
      diffTime += RepeatTime; // at this line getting error 
     } 

     // Start alarm using initial notification time and repeat interval time 
     mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
       SystemClock.elapsedRealtime() + diffTime, 
       RepeatTime , mPendingIntent); 

     // Restart alarm if device is rebooted 
     ComponentName receiver = new ComponentName(context, BootReceiver.class); 
     PackageManager pm = context.getPackageManager(); 
     pm.setComponentEnabledSetting(receiver, 
       PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
       PackageManager.DONT_KILL_APP); 

    } 
+0

是完全應用之前崩潰掛....能我有解決方案嗎? – Sun

+0

嘗試在循環中添加日誌,以確保發生了什麼 – bwt

+0

這是我得到的:D/SOME_TAG:將diffTime設置爲-83485 – Sun

相關問題