android-窗口小部件在“清除内存”后不起作用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android-窗口小部件在“清除内存”后不起作用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3264字,纯文字阅读大概需要5分钟。
内容图文
![android-窗口小部件在“清除内存”后不起作用](/upload/InfoBanner/zyjiaocheng/950/db88b7f870e244e7b42d7c08814759c0.jpg)
问题是我使用内置的任务管理器的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-窗口小部件在“清除内存”后不起作用全部内容,希望文章能够帮你解决android-窗口小部件在“清除内存”后不起作用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。