2012-01-16 2 views
0

時計を持ったウィジェットを使ってアプリを作成しましたが、約30分後に問題が解消しました。また、「高度なタスクキラー」でアプリを終了すると機能も停止します。どうすれば私のアプリを常に生き生きとさせることができますか?ここでは、ウィジェットのクラスがある:時計ウィジェットを殺しました

package com.shamir; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import android.app.PendingIntent; 
import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Handler; 
import android.widget.RemoteViews; 

public class Widget extends AppWidgetProvider 
{  
private Handler mHandler = new Handler(); 
RemoteViews views; 
AppWidgetManager appWidgetManager; 
ComponentName currentWidget; 
Context context; 
DateFormat time_format = new SimpleDateFormat("HH:mm:ss"); 
DateFormat date_format = new SimpleDateFormat("dd.MM.yy"); 


public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
{ 

    this.context = context; 
    this.appWidgetManager = appWidgetManager; 
    views = new RemoteViews(context.getPackageName(), R.layout.widget); 
    currentWidget = new ComponentName(context, Widget.class); 
    mHandler.removeCallbacks(mUpdateTask); 
    mHandler.postDelayed(mUpdateTask, 100); 


} 

final Runnable mUpdateTask = new Runnable() 
{ 
    public void run() 
    { 
     Intent informationIntent = new Intent(context,MainScreen.class); 
     PendingIntent infoPendingIntent = PendingIntent.getActivity(context, 0, informationIntent, 0); 
     views.setOnClickPendingIntent(R.id.w_start, infoPendingIntent); 
     views.setTextViewText(R.id.widget_time,time_format.format(new Date())); 
     views.setTextViewText(R.id.widget_date,date_format.format(new Date())); 
     appWidgetManager.updateAppWidget(currentWidget, views); 
     mHandler.postDelayed(mUpdateTask, 1000); 

    }  
}; 

@Override 
public void onDisabled(Context context) 
{ 
    super.onDisabled(context); 
    mHandler.removeCallbacks(mUpdateTask); 
} 

}

答えて

1

私はすべてのご質問は、SOの前に回答されているが、集約すると思います....

  • あなたは防ぐことはできませんユーザーがタスクキラーであなたのアプリを殺すのを防ぐ(this postを参照)

  • あなたのアプリ/ウィジェットを自動的に終了させないようにするには、service。これにより、メモリが必要なときにAndroidがプロセスを終了させる可能性は低くなります(不可能ではありません)。

あなたのウィジェットを常時稼働させると、すぐにデバイスのバッテリーが消耗するので、注意してください。あなたの更新を制限することを確認してください(this postの提案を確認してください)

0

本当にこのような時計を作ってはいけません。これらの変数をすべて有効に保つことは、ユーザーにとっては悪いことであり、システムを殺すことから回復することは困難です。アラームマネージャを使用して、過去の図面とは独立した方法で60秒ごとに時間を完全に再描画するサービスを開始します(たとえば、カレンダーを作成するなど、起動するたびに)。サービスを開始する方法は次のとおりです。

AlarmManager alman = (AlarmManager) cont.getSystemService(Context.ALARM_SERVICE); 

Intent timeService = new Intent(cont, XTime.class); 
PendingIntent timePending = PendingIntent.getService(cont, 0, timeService, 0); 
int rem = 60 - Calendar.getInstance().get(Calendar.SECOND); 

alman.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + rem * 1000, 60000, timePending); 
関連する問題