每秒定期更新小部件
Posted
技术标签:
【中文标题】每秒定期更新小部件【英文标题】:Update Widget Periodically Every Second 【发布时间】:2013-02-25 15:49:02 【问题描述】:我目前有一个使用两个setTextViewText
的小部件:
公共类 DigitalClock 扩展 AppWidgetProvider
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
int N = appWidgetIds.length;
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digitalclock);
for (int i = 0; i < N; i++)
int appWidgetId = appWidgetIds[i];
Intent clockIntent = new Intent(context, DeskClock.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, clockIntent, 0);
views.setOnClickPendingIntent(R.id.rl, pendingIntent);
java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "kk:mm";
String date = "dd MMMMM yyyy";
views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));
views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));
appWidgetManager.updateAppWidget(appWidgetId, views);
我的问题是如何使用它来设置两个 TextView
每秒,以便时间更新而不是 appwidgetprovider
允许的 30 分钟?
我听说过使用AlarmManager
,使用service
,handler
....问题是似乎没有人说清楚或举例说明我将如何去做。
因此,如果有人有明确的方法来完成此操作,我将不胜感激,谢谢
【问题讨论】:
你真的不应该每秒更新一个应用小部件。每个应用程序小部件更新都相对昂贵,并且每秒更新一次也意味着您的进程将一直在内存中徘徊。时钟最好作为主屏幕本身的功能来实现,以提高效率。 【参考方案1】:您可能有一些服务在后台运行。将广播消息从该服务或活动发送到扩展 AppWidgetProvider 的类(在您的情况下为 DigitalClock),然后覆盖同一类的 onReceive() 函数。
第 1 步:从服务或某处发送广播。
第 2 步:在您的 DigitalClock 类中添加 onReceive() 函数。
public class DigitalClock extends AppWidgetProvider
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
int N = appWidgetIds.length;
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digitalclock);
for (int i = 0; i < N; i++)
int appWidgetId = appWidgetIds[i];
Intent clockIntent = new Intent(context, DeskClock.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, clockIntent, 0);
views.setOnClickPendingIntent(R.id.rl, pendingIntent);
java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "kk:mm";
String date = "dd MMMMM yyyy";
views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));
views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));
appWidgetManager.updateAppWidget(appWidgetId, views);
@Override
public void onReceive(Context context, Intent intent)
super.onReceive(context, intent);
//Do your task here like updating the textviews
【讨论】:
这种方法似乎不再适用了。 reddit.com/r/androiddev/comments/clte0i/…以上是关于每秒定期更新小部件的主要内容,如果未能解决你的问题,请参考以下文章