时钟小工具被杀死

时间:2012-01-16 09:55:01

标签: android-widget android

我用带有时钟的小部件创建应用程序,问题是大约半小时后停止工作或当我用“高级任务杀手”杀死应用程序时它也停止工作。如何让我的应用程序始终保持活动状态或仅保持小部件。这是小部件的类:

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

}

2 个答案:

答案 0 :(得分:1)

我认为您之前的所有问题都已在SO上得到解答,但要汇总......

  • 您无法阻止用户使用任务杀手杀死您的应用(请参阅this post

  • 要防止Android自动终止您的应用/小部件,您需要service。这使得Android在需要内存时杀死你的进程的可能性大大降低(但并非不可能)。

请注意,让小部件始终保持运行会很快耗尽设备的电量,所以要小心!确保限制更新(查看this post以获取建议)

答案 1 :(得分: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);
相关问题