Android Widget随机停止工作

我已经在这个问题上工作了三天了,我已经在这里看了每个问题的答案.我有一个带有按钮的小部件,我希望它只是在每次点击时启动服务.问题是该按钮随机停止工作.我根本无法再创造它,我不知道是什么导致它.我的服务调用stopSelf();但是我也遇到了广播接收器这个问题所以我认为问题出在小部件而不是服务中.这是代码
public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[]     appWidgetIds) 
{

Log.i("Widget","onUpdate");

final int N = appWidgetIds.length;

    for (int i=0; i<N; i++) 
    {

        int appWidgetId = appWidgetIds[i];

        Log.i("Widget","onUpdateLoop");


        Intent intent = new Intent(context,ServiceWidgetAction.class);
        intent.setAction(Long.toString(System.currentTimeMillis()));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent pendingIntent = PendingIntent
                .getService(context,intent,PendingIntent.FLAG_UPDATE_CURRENT);

        RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);

        views.setOnClickPendingIntent(R.id.widgetButton,pendingIntent);

        views.setTextViewText(
                R.id.widgetTextView,"Some text");

        appWidgetManager.updateAppWidget(appWidgetId,views);

    }

}

我一遍又一遍地检查了这段代码,我不知道为什么会这样做.它在3个独立的手机上执行此操作,我无法重新创建它.我已经尝试强制停止应用程序,从任务管理器清除它添加新的小部件等,以使小部件停止工作,它不会.然而,当我今天早上醒来时,小部件不再有效.任何帮助将不胜感激.

解决方法

我最终搞清楚了问题.我正在从应用程序中的其他位置更新小部件,但我没有完整的代码.换句话说,我的应用程序更新了小部件中的文本视图
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);

    views.setTextViewText(
            R.id.widgetTextView,"Some text");

    appWidgetManager.updateAppWidget(appWidgetId,views);

但它需要整个代码来保持按钮注册如下:

Intent intent = new Intent(context,ServiceWidgetAction.class);
    intent.setAction(Long.toString(System.currentTimeMillis()));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent pendingIntent = PendingIntent
            .getService(context,PendingIntent.FLAG_UPDATE_CURRENT);

    RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget);

    views.setOnClickPendingIntent(R.id.widgetButton,pendingIntent);

    views.setTextViewText(
            R.id.widgetTextView,views);

因此,无论何时从应用程序内更新窗口小部件,都要确保底线是确保它看起来与窗口小部件中的代码完全相同.不要遗漏任何东西.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...