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