gpt4 book ai didi

java - 不是 AppWidgetProvider 中的 onUpdate

转载 作者:行者123 更新时间:2023-12-01 13:23:31 25 4
gpt4 key购买 nike

我的 Android 小部件未更新日期。

这是一个只有日期的小部件,没有更多。

package com.android.widget;

import java.util.Timer;
import java.util.TimerTask;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;

public class MyCalendarWidget extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1,
1000);
}

private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
Fecha fec = new Fecha();

public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
thisWidget = new ComponentName(context, MyCalendarWidget.class);
}

@Override
public void run() {
remoteViews.setTextViewText(R.id.widget_textview, fec.DiaActual(false)+"\r\n"
+fec.DiaActual(true) +" de "
+fec.MesActual(false)+" de "
+fec.AñoActualNumerico());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
}

最佳答案

请首先阅读文档,AppWidget GuideAppWidgetProvider 。这解释了:

  • 您的 onUpdate() 方法需要通过 updateAppWidget() 向小部件发送 RemoteViews。
  • 每秒唤醒一次会耗尽电池电量。您当然不想在手机 hibernate 时更新小部件。
  • 每次调用remoteViews.setTextViewText() 都会将更多数据附加到RemoteViews 对象。这会在内存中积累过多的数据,并使小部件变慢。相反,每次都获取一个新的 RemoteViews 实例。

我关于您的更新没有发生的假设是,当提供程序完成对 Intent 的响应时,操作系统会停止您的小部件提供程序的组件。您可以通过 Log.d() 测试该假设。

您可以注册ACTION_TIME_TICK广播告诉您时间何时改变,每分钟一次。请测试它在手机 sleep 时是否不运行(例如,记录通话次数),并随时在此处报告。

[已添加] 在实践中,显示日期(每天更新一次)比显示日期+时间(每分钟更新一次;您的问题代码尝试更新它)要容易得多每秒一次),并且无需消耗太多电池电量即可完成此操作。

  • 设置updatePeriodMillis="0" .
  • 添加<action android:name="android.intent.action.DATE_CHANGED"/><intent-filter> AndroidManifest.xml 中的小部件提供程序。
  • 在 AppWidgetProvider 中,覆盖

    public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) { updateAllMyWidgets(context); }
    }
  • 使用DateUtils.formatDateTime()设置日期格式。

是的,错误 code.google.com/p/android/issues/detail?id=2880如果时钟向后调整就会发生。

关于java - 不是 AppWidgetProvider 中的 onUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com