Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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小部件,每分钟更新一次_Android_Android Widget_Android Service_Android Alarms - Fatal编程技术网

电池效率高的android小部件,每分钟更新一次

电池效率高的android小部件,每分钟更新一次,android,android-widget,android-service,android-alarms,Android,Android Widget,Android Service,Android Alarms,我知道这是一个可能的重复,但我还没有找到一个具体的答案?(关于如何强制小部件每秒更新,有部分答案,但这并不是我想要的全部…) 我需要有一个小部件,将更新一分钟 如何使电池、CPU和RAM高效的小部件达到这个目的?(数据将从互联网上获取并在向用户显示之前进行解析(少量数据和处理需要完成) 如果用户在屏幕上有小部件,我应该创建一个启动时运行的服务,并让该服务计划一个警报管理器来唤醒更新小部件的服务吗? 另外,如果屏幕被锁定或关闭以节省电池,我想暂停此服务…这正是我做类似事情的方式。我创建了一个服务(

我知道这是一个可能的重复,但我还没有找到一个具体的答案?(关于如何强制小部件每秒更新,有部分答案,但这并不是我想要的全部…)

  • 我需要有一个小部件,将更新一分钟

  • 如何使电池、CPU和RAM高效的小部件达到这个目的?(数据将从互联网上获取并在向用户显示之前进行解析(少量数据和处理需要完成)

  • 如果用户在屏幕上有小部件,我应该创建一个启动时运行的服务,并让该服务计划一个警报管理器来唤醒更新小部件的服务吗?


  • 另外,如果屏幕被锁定或关闭以节省电池,我想暂停此服务…

    这正是我做类似事情的方式。我创建了一个服务(
    IntentService
    ,如果您不需要任何复杂的东西),然后在alarm manager中注册它

    long interval = intervalMinutes * 60 * 1000;
    long firstTime = Calendar.getInstance().getTimeInMillis();
    
    Intent i = new Intent(ctx, AlarmService.class);
    // Use the widget ID to update only one widget at a time.
    i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
    PendingIntent mAlarmSender = PendingIntent.getService(ctx, id, i, PendingIntent.FLAG_UPDATE_CURRENT);
    
    AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, mAlarmSender);
    
    正在AlarmService.class您的服务或IntentService

    对于引导事件,您可以创建一个
    BroadcastReceiver
    并管理一个
    android.intent.action.boot\u COMPLETED
    操作,在该操作中您可以注册警报

    您可以在
    AndroidManifest
    中注册该事件:

    <receiver android:name=".BroadcastReceiverWidget" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    

    我就是这样做的。我创建了一个服务(
    IntentService
    ,如果您不需要任何复杂的东西),然后在alarm manager中注册它

    long interval = intervalMinutes * 60 * 1000;
    long firstTime = Calendar.getInstance().getTimeInMillis();
    
    Intent i = new Intent(ctx, AlarmService.class);
    // Use the widget ID to update only one widget at a time.
    i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
    PendingIntent mAlarmSender = PendingIntent.getService(ctx, id, i, PendingIntent.FLAG_UPDATE_CURRENT);
    
    AlarmManager am = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, firstTime, interval, mAlarmSender);
    
    正在AlarmService.class您的服务或IntentService

    对于引导事件,您可以创建一个
    BroadcastReceiver
    并管理一个
    android.intent.action.boot\u COMPLETED
    操作,在该操作中您可以注册警报

    您可以在
    AndroidManifest
    中注册该事件:

    <receiver android:name=".BroadcastReceiverWidget" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    
    
    
    谢谢我实现了这一点,我只想补充一点,添加BOOT_COMPLETED是没有必要的,因为appWidgetProvider的onEnabled方法在启动时被调用,所以这是一个很好的开始初始化的地方,将用于所有小部件。谢谢我实现了这一点,我只想补充一点,添加BOOT_COMPLETED是没有必要的,因为appWidgetProvider的onEnabled方法在引导时被调用,所以这是一个很好的开始初始化的地方,将用于所有小部件。