Android 安卓O:我们可以制作一个时钟小部件吗?

Android 安卓O:我们可以制作一个时钟小部件吗?,android,widget,android-jobscheduler,Android,Widget,Android Jobscheduler,我们的应用程序中有一个时钟小部件。 小部件需要每分钟更新一次,以显示正确的时间 在Android O中,建议使用JobScheduler进行后台更新。 不幸的是,存在一些限制 不能在少于15分钟的间隔内调用JobService的定期更新 JobService.onStartJob()的时刻是不可预测的。我们可能会错过更新分钟数字(59秒)的确切时间 之前,我们使用Handler.postdayed()运行后台服务来更新小部件中的时间。 在O中,后台服务可由系统终止 您建议如何在Android O

我们的应用程序中有一个时钟小部件。 小部件需要每分钟更新一次,以显示正确的时间

在Android O中,建议使用JobScheduler进行后台更新。 不幸的是,存在一些限制

  • 不能在少于15分钟的间隔内调用JobService的定期更新
  • JobService.onStartJob()的时刻是不可预测的。我们可能会错过更新分钟数字(59秒)的确切时间 之前,我们使用Handler.postdayed()运行后台服务来更新小部件中的时间。 在O中,后台服务可由系统终止

    您建议如何在Android O中实现时钟小部件

    现在可能吗


    这是一个小部件;它不需要一直更新——只有在它可见时才需要更新。当你的小部件没有运行时,你为什么要浪费电池来跟踪当前时间

    当小部件变得可见时,查找当前时间并立即绘制。另外,计算下一分钟的顶部是什么时候,并将延迟消息或Runnable发送给将在该时刻触发的处理程序。当该消息/Runnable执行时,更新您的时间显示,并在下一分钟的顶部重新发布该消息/Runnable

    您还应该为报警管理器在当前时间更改时发出的
    Intent.ACTION\u TIME\u CHANGED
    广播注册一个接收器;您需要重新计算显示的时间以及下一次更新的时间,以响应该广播。

    使用“TextClock”窗口小部件控件,它受RemoteView功能支持,并且它自己每分钟更新一次,无需使用那些花哨的JobScheduler作业

    像这样的东西可以达到目的:

    <LinearLayout
        android:id="@+id/root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextClock
            android:id="@+id/dateText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:format12Hour="@string/date_text_format_12h"
            android:format24Hour="@string/date_text_format_24h"
            android:gravity="bottom|center_horizontal"
            android:textColor="@android:color/black"
            android:textSize="@dimen/date_text_size_default"/>
    
        <TextClock
            android:id="@+id/timeText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:format12Hour="@string/time_text_format_12h"
            android:format24Hour="@string/time_text_format_24h"
            android:gravity="top|center_horizontal"
            android:textColor="@android:color/black"
            android:textSize="@dimen/time_text_size_default"
            android:textStyle="bold"/>
    
    </LinearLayout>
    
    
    
    知道我的问题为什么被否决了吗?试试JobIntentService这是一个非常重要的问题。这不应该被贬低谢谢你的支持,卡森!是的,我对此投了更高的票,因为这很重要……大多数时钟小部件都使用旧技术,因为时钟小部件是Android中的第一代应用程序。现在谷歌迫使开发者向前迈进一步。但没有明确的解决方案。JobIntentService、JobScheduler、JobDispatcher、通过通知的ForegroundsService……对于一个简单的时钟小部件来说,所有这些似乎都是多余的。那么,当小部件变为可见时,它会触发什么事件呢?据我所知,没有办法检测小部件变为可见的时刻。我同意。无法知道小部件是否可见,因此上述建议将不起作用。我也在寻找一个解决方案,使时钟小部件在Android O中工作。到目前为止还没有解决方案。即使现在改变了操作时间,也不需要广播。我没想到这个解决方案会这么简单。我们甚至在几周前联系了谷歌开发者支持。他们仍然没有提供任何答案。非常感谢你!TextClock小部件仅在API 17开始时可用。此解决方案不适用于模拟时钟。有人知道Android Oreo中是否可以创建模拟时钟吗?我还想知道模拟时钟的解决方案。另一个问题是,不能在TextClock中使用不同的字体。除了使用TextClock,还有其他解决方案吗?