android-窗口小部件在“清除内存”后不起作用

问题是我使用内置的任务管理器的Clean Memory / Ram后,我的小部件停止工作.我想这与任务管理器的RAM清理方法有关.经过大量研究和尝试,我发现我需要
broadcastReciever收听包的更改和更新:
所以我实现了,但是它不起作用,因为文档说Restarted/Cleared包没有收到此广播

在清单文件注册接收者:

<receiver android:name="com.app.lab.receiver.onRestartReciever">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REPLACED" />
        <action android:name="android.intent.action.PACKAGE_RESTARTED" />
         <action android:name="android.intent.action.PACKAGE_DATA_CLEARED"/>
        <data android:scheme="package"  />
    </intent-filter>

PACKAGE_REPLACED-特别是为了通知应用程序更新而调用.

PACKAGE_RESTARTED-在大多数内存清理程序正在清理内存时调用.

“数据”行用于监视应用于特定程序包的操作.

public class onRestartReciever extends broadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Todo Auto-generated method stub
Log.d("DEBUG", "onRestartReciever");//I am not getting this log on clearing memory from task manager



}
}

我试图使用虚拟服务来获取其生命周期,即检查何时调用onDestroy,但是我发现它不是一种可靠的方法,当应用程序被任务管理器杀死时,onDestroy可能不会被调用.

所以最后,我的问题是:有没有办法告诉Android系统在任务管理器或OS清理内存时重新启动appWidgets.

注意:我的窗口小部件仅包含一个启动活动的按钮,它在大多数时间都可以正常运行,但是如果OS本身清理内存或用户从任务管理器中强制执行此操作则停止响应.我已经下载了一些窗口小部件,它似乎可以正常运行清洗内存后也.

更新:对于我的问题,不需要通过完整的代码,这是简单的Application.我的申请不包含任何活动或服务.它只包含一个带有吐司消息的按钮的小部件.在我的应用程序中只有两个类(WidgetProvider和onRestartReciever).
窗口小部件类WidgetProvider.class

 public class WidgetProvider extends appwidgetprovider {

private RemoteViews remoteViews;
private ComponentName watchWidget;
PendingIntent pi;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.touchwidget);
   Intent toggleClickPlayer = new Intent(context.getApplicationContext() ,WidgetProvider.class);
    toggleClickPlayer.setAction("PLAYER");
    PendingIntent toggleIntentPlayer = PendingIntent.getbroadcast(context,0, toggleClickPlayer,endingIntent.FLAG_CANCEL_CURRENT);
    remoteViews.setonClickPendingIntent(R.id.player, toggleIntentPlayer);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    watchWidget = new ComponentName(context,WidgetProvider.class);
    remoteViews = new RemoteViews(context.getPackageName(),R.layout.touchwidget);
Toast.makeText(context, " Player started",Toast.LENGTH_SHORT).show();
(AppWidgetManager.getInstance(context)).updateAppWidget(watchWidget, remoteViews);
        }
    } 
 }

解决方法:

窗口小部件不受应用程序生命周期的约束.所有小部件都绑定在一起.如果您的窗口小部件仅有一个按钮,那么没有理由停止它.你的问题在别的地方.
由于某种原因,您的按钮意图无法启动,但您将其设置为开始.

如果您向我展示设置按钮的代码,我们将为您提供更多帮助,但这是另一个问题,在发布之前,您最好让Google为您解答.

编辑:看来您不了解小部件的想法.现在,您的按钮正在启动小部件.在我看来,这很奇怪,我不确定那里到底发生了什么…我建议您的按钮将启动一项全新的服务.该服务将向您展示烤面包.您绝对不需要收听重新启动程序包广播.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...