2010-12-07 7 views
3

私はAndroid Appウィジェットを作成するためのチュートリアルに従っていましたが、少し問題がありました。チュートリアルでは、このコードを作成するために私を導い:AppウィジェットのアップデートTextView

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メソッドは、呼び出されていないされてないようです。あなたの助けてくれてありがとう、私はApp Widgetsを手に入れたいと思う。

ニック

答えて

3

まず、あなたはTimerを使用することはできません。 AppWidgetProviderTimerは、onUpdate()が返されるとガベージコレクションされます。

第2に、毎秒アプリウィジェットを更新しないでください。 android:updatePeriodMillisに最小30分のアプリのウィジェットへのアップデートが必要なのは、高価な操作であるという理由があります。毎秒1つを更新するだけで、あなたの「アプリウィジェットを更新する」コードが効果的にメモリに常駐し、常に実行されるだけでなく、ユーザーのバッテリーをかなり大きく叩くことになります。

アプリウィジェットを定期的に更新する場合は、android:updatePeriodMillisを使用するか、AlarmManagerを使用してください。

+0

よろしくお願いします。時計は毎秒更新する必要がありますが、AlarmManagerはこのバッテリーを効率的に使用できますか? – Nick

+0

@Nick:時計をアプリウィジェットとして実装しないでください。時計はホーム画面の機能であり、他のアクティビティ(アラーム時計アプリなど)の機能です。 – CommonsWare

+0

私はAppWidgetProviderを拡張しません。それでは、時計であるホームスクリーンのウィジェットはどうやって始めるのですか? – Nick

関連する問題