我创建了一个小部件,每秒都显示倒计时。 但有时随机停止并且永远不会启动,我必须将其从屏幕上移除并再次添加到主屏幕才能启动。
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final AppWidgetManager mngr = appWidgetManager;
new CountDownTimer(endTime.getTimeInMillis(), 1000) {
public void onTick(long millisUntilFinished) {
updateClockValues(c, mngr);
}
public void onFinish() {
}
}.start();
}
private void updateClockValues(Context context, AppWidgetManager mngr) {
System.out.println("update widget function");
RemoteViews remoteViews;
AppWidgetManager appWidgetManager = mngr;
ComponentName thisWidget;
final long sec = // some code to find seconds...and other values
// Get views for widget
remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widgetxml);
thisWidget = new ComponentName(context, BreakingDownWidget.class);
remoteViews.setOnClickPendingIntent(R.id.rlMain, configPendingIntent);
remoteViews.setTextViewText(R.id.txtSec, sec);
// Update widget
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
任何人都可以告诉我,如何在获得焦点时再次启动小部件,有时在屏幕之间切换会停止此操作。
提前致谢。
答案 0 :(得分:2)
我创建了一个小部件,每秒都显示倒计时。
请不要那样做。您在浪费用户的CPU时间和电池寿命。应用程序小部件旨在每隔几分钟更新一次,而不是每秒更新一次。
但有时随机停止并且永远不会启动,我必须将其从屏幕上移除并再次添加到主屏幕才能启动。
当然。 AppWidgetProvider
是一个清单注册的BroadcastReceiver
。这些组件应该存活几毫秒,足以让onReceive()
完成,然后消失。如果需要RAM,Android可以并且将在之后终止您的进程。您的CountDownTimer
正在分支后台主题,但明确注册的BroadcastReceiver
不支持。