android - App Widget 更新 TextView

标签 android timer textview android-appwidget

我一直在按照教程制作 Android 应用程序小部件,但遇到了一些麻烦。教程引导我创建了这段代码:

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;
    DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());

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

    @Override
    public void run() {
        remoteViews.setTextViewText(R.id.widget_text, "Time: "+format.format(new Date()));
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }
}

但似乎永远不会调用 run 方法,因为 TextView 永远不会改变。感谢您的帮助,我很想了解 App Widgets。

尼克

最佳答案

首先,您不能使用Timer。一旦 onUpdate() 返回,您的 AppWidgetProviderTimer 将被垃圾回收。

其次,请不要每秒更新一个应用程序小部件。 android:updatePeriodMillis 的最小更新时间为 30 分钟是有原因的——将更新推送到应用小部件是一项昂贵的操作。每秒更新一个不仅会强制您的“更新应用程序小部件”代码有效地驻留在内存中并一直运行,而且还会显着消耗用户的电池电量。

对于应用小部件的定期更新,请使用 android:updatePeriodMillis 或使用 AlarmManager

关于android - App Widget 更新 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378685/

相关文章:

android - 基于接近度的遥控 key 安全设备,带蓝牙 : how it works

android - 我无法使用计时器播放动画

java - 如何在 Java 中正确处理定时器?

android - 如何在 gradle 上添加我的框架

android - Android 中 ActionScript 3 的事件广播的等价物是什么?

android - 该应用程序在使用后仍在 ram 中,每次我玩该应用程序时占用更多 2 空间?

Android通过处理程序在单独的线程上更新TextView

android - 在问卷应用程序中使用 textView 数组

android - 如何将字符串添加到 Android TextView?

android - 拥有在我的应用程序包 ID 中使用的域