Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 它不是在单例模式下,U可以';我用不着它_Android_Calendar_Alarm_Reminders - Fatal编程技术网

Android 它不是在单例模式下,U可以';我用不着它

Android 它不是在单例模式下,U可以';我用不着它,android,calendar,alarm,reminders,Android,Calendar,Alarm,Reminders,在我的提醒应用程序中,如果我选择了刚刚过去的时间,则应用程序不工作,出现以下错误: 日志 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/dalvikv

在我的提醒应用程序中,如果我选择了刚刚过去的时间,则应用程序不工作,出现以下错误:

日志

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);
    }
public void setRepeatAlarm(上下文上下文、日历、int-ID、长RepeatTime){
mAlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
//将提醒ID放入“额外意图”
意向意向=新意向(上下文,AlarmReceiver.class);
intent.putExtra(rementereditactivity.EXTRA_rementer_ID,Integer.toString(ID));
mpendingent=pendingent.getBroadcast(上下文、ID、意图、pendingent.FLAG_CANCEL_CURRENT);
//计算通知时间
Calendar c=Calendar.getInstance();
长currentTime=c.getTimeInMillis();
long diffTime=calendar.getTimeInMillis()-currentTime;
while(diffTime<0){
diffTime+=RepeatTime;//此行出现错误
}
//使用初始通知时间和重复间隔时间启动报警
mAlarmManager.setRepeating(AlarmManager.Runsed_REALTIME,
SystemClock.elapsedRealtime()+diffTime,
重复时间,mpendingent);
//如果设备重新启动,则重新启动警报
ComponentName接收器=新的ComponentName(上下文,BootReceiver.class);
PackageManager pm=context.getPackageManager();
pm.setComponentEnabledSetting(接收器、,
PackageManager.COMPONENT\u ENABLED\u STATE\u ENABLED,
PackageManager.Don_KILL_APP);
}
如何解决此问题?

我认为对信号3作出反应是ANR的症状。应用程序在崩溃之前是否挂起?如果是这样,可能是因为循环永远不会结束

您确定
RepeatTime
始终>0(特别是不=0)吗

比如:

   while(diffTime < 0) {
         Log.d("SOME_TAG", "set diffTime to " + diffTime);
         diffTime += RepeatTime; // at this line getting error
    }
while(diffTime<0){
Log.d(“SOME_标记”,“将diffTime设置为“+diffTime”);
diffTime+=RepeatTime;//此行出现错误
}
不应显示超过几行

更新:

您应确保报警在未来或重复时间大于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);

    }
if(diffTime>0 | | RepeatTime>0){
//仅当参数一致时设置报警
while(diffTime<0){
diffTime+=RepeatTime;//此行出现错误
}
//使用初始通知时间和重复间隔时间启动报警
mAlarmManager.setRepeating(AlarmManager.Runsed_REALTIME,
SystemClock.elapsedRealtime()+diffTime,
重复时间,mpendingent);
//如果设备重新启动,则重新启动警报
ComponentName接收器=新的ComponentName(上下文,BootReceiver.class);
PackageManager pm=context.getPackageManager();
pm.setComponentEnabledSetting(接收器、,
PackageManager.COMPONENT\u ENABLED\u STATE\u ENABLED,
PackageManager.Don_KILL_APP);
}

是,应用程序在崩溃前会挂起。。。。请给我一个解决方案好吗?尝试在循环中添加日志,以确保发生了什么这就是我得到的:D/SOME_TAG:set diffTime为-83485在崩溃前仅1次?我原以为会有很多台词是的,我收到了很多台词,但都传达了同样的信息