我正在尝试创建一个非常简单的小部件,它可以每隔5s更改一次显示的文本。然而,我有一些重大的麻烦试图让这个工作。显然我不能使用onUpdate调用,因为它至少每30分钟一次。 目前我的解决方案在扩展的服务类中使用了一个Timer,它像地狱一样丑陋,并且在一段时间后会像狗一样运行。这样做是否有“干净”的方式,即。以不需要Widget,UpdateService,Timers等的方式
我不是要求整个解决方案,只是指示如何以有效的方式执行此操作。
谢谢, 约翰
答案 0 :(得分:1)
使用CountdownTimer
:
new CountdownTimer(5000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
答案 1 :(得分:0)
我所做的是添加了以下在Widget提供程序中调用的过程....就像这样......
所以小部件每隔30秒会更新24小时....
我也在我的主应用程序代码中我有一些我更新的首选项然后我使用提供程序事件然后调用提取器来提取pref信息....更新没有服务:)
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
try {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
updateWidgetView(context, context.getSharedPreferences(
MainActivity.APP_PREFERENCES,
Context.MODE_PRIVATE));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void updateAppWidget(final Context context, final AppWidgetManager appWidgetManager,
final int appWidgetId){
Context c;
c = context;
try {
new CountDownTimer(86400, 30000) {
public void onTick(long millisUntilFinished) {
//do proc every 30sec here. pull prefs and show them
SharedPreferences preferencesaa = PreferenceManager.getDefaultSharedPreferences(context);
String drinkmsg = preferencesaa.getString("WIDGETTEXT", "You need to drink water.");
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);
updateViews.setTextViewText(R.id.widget_text_threat, drinkmsg.toString());
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
public void onFinish() {
}
}.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}