2012-01-16 81 views
0

我創建了應用程序與有時鐘的小工具,問題是大約半小時後停止工作時鐘或當我殺死與「高級任務殺手」應用程序它也停止工作。我怎樣才能讓我的應用永遠活着或只有小部件。這裏是類widget的:時鐘小工具殺死

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

我認爲所有的問題都已經在此之前回答,但聚集....

  • 你不能阻止用戶使用任務殺手(請參閱this post

  • 爲了防止Android自動終止您的應用/小部件,您需要一個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);