Java 未在AppWidgetProvider中更新
我的Android小部件没有更新日期 这是一个只有日期的小部件,没有更多Java 未在AppWidgetProvider中更新,java,android-widget,Java,Android Widget,我的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
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);
}
}
}
请先阅读文档,然后。这说明:
- 您的onUpdate()方法需要通过updateAppWidget()向小部件发送RemoteView
- 每秒醒来一次会耗尽你的电池。您当然不想在手机处于睡眠状态时更新小部件
- 每次调用RemoteView.setTextViewText()都会向RemoteView对象追加更多数据。这将在内存中积累多余的数据,并使小部件速度变慢。相反,每次都要获取一个新的RemoteView实例
- 设置
updatePeriodMillis=“0”
- 如果时钟向后调整,则会添加
。谢谢你,先生非常友好。请想知道是否可以使用此项目的调试。当我尝试时,它不起作用。谢谢,但尽管这对我帮助很大,因为我是Android的新手,他的解释非常大。如果你能给我发一个关于行动时间的链接,请勾选这样的例子。我会永远感激的。调试器应该在这个项目上工作。如果您在设备上运行,请记住使用设置来启用开发功能,包括调试。您可能希望从一个只使用活动的更简单的项目开始。这个项目需要学习widget、Intent、receiver、Services等。web搜索将找到使用ACTION_TIME_TICK[尽管其中一些设计不完善]的示例,例如:
registerReceiver(new DemoReceiver()、new IntentFilter(Intent.ACTION_TIME_TICK))代码>它需要在服务中才能在后台运行。该页面还讨论了设备重新启动时的重新注册以及停止服务的必要性。我认为清单不需要intent-filter中的
。更好的主意是:只有当屏幕打开且时钟小部件的实例存在时,它才可以节省电池电量、CPU和内存来监听操作时间。为此,在清单中定义一个广播接收器,用于打开和关闭操作屏幕。在操作屏幕上,如果WidgetId数组不为空,则启动服务。该服务将注册操作时间。当它收到勾号时,服务将更新小部件,或者,如果widgetIds数组为空,则停止自身。同样在“动作屏幕”关闭时,停止服务。谢谢,我肯定是在和另一个银河系的生物说话:)我真的很感激,但如果你解释得好,我就不明白了,对不起。我已经考虑过了。因为onUpdate每30分钟更新一次。为什么不看一天中的时间,如果是00:00:01,我会更新文本视图并准备好。我想这不会损害电池消耗或使用cpu作为最短更新时间。你不这么认为吗?。public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if (Intent.ACTION_DATE_CHANGED.equals(intent.getAction())) { updateAllMyWidgets(context); } }