3

私は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);
    }
}

ただし、TextViewは変更されないため、runメソッドが呼び出されることはないようです。あなたの助けに感謝します、私はアプリウィジェットのハンドルを手に入れたいです。

ニック

4

1 に答える 1

3

まず、は使用できませんTimer。あなたのAppWidgetProvider、およびはTimer、戻ったときにガベージコレクションされonUpdate()ます。

次に、アプリウィジェットを毎秒更新しないでください。最短で30分かかるのには理由がありandroid:updatePeriodMillisます。アプリウィジェットに更新をプッシュするのはコストのかかる操作です。1秒ごとに更新すると、「アプリウィジェットの更新」コードがメモリ内に効果的に常駐し、常に実行されるようになるだけでなく、ユーザーのバッテリーをかなり大幅に消費することになります。

アプリウィジェットを定期的に更新するには、を使用するandroid:updatePeriodMillisか、を使用しますAlarmManager

于 2010-12-07T17:23:34.753 に答える