Widget stops responding to clicks (widget freezes)

会有一股神秘感。 提交于 2019-12-10 16:54:09

问题


I have simple app with widget. Widget works good for some time. After open and close another app (e.g. some game for the most cases) my widget stops responding to clicks. Do you know how to fix widget freezing please?

I folowed some similar situation, but with no success: Android widget not responding to touches, Android widget buttons stop working, Android Widget stops working randomly, atc.

My actual Widget.class:

public class Widget extends AppWidgetProvider{
        private DBManager dbManager;

        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

            final int N = appWidgetIds.length;
            String URI_SCHEME = "A";

            // Perform this loop procedure for each App Widget that belongs to this provider
            for (int i=0; i<N; i++) {
                int appWidgetId = appWidgetIds[i];

                // Create an Intent to launch ExampleActivity
                Intent intent = new Intent(context, MainOverview.class);
                Intent intent2 = new Intent(context, AddFragment.class);
                intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                intent2.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetId);
                intent2.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetId);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);

                // Get the layout for the App Widget and attach an on-click listener
                // to the button
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
                views.setOnClickPendingIntent(R.id.widget_all, pendingIntent);
                views.setOnClickPendingIntent(R.id.widget_add, pendingIntent2);

                Uri data = Uri.withAppendedPath(
                        Uri.parse(URI_SCHEME + "://widget/id/")
                        ,String.valueOf(appWidgetId));
                intent.setData(data);
                intent2.setData(data);

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM", Locale.ENGLISH);
                final Calendar calendar = new GregorianCalendar();
                String text_date = sdf.format(calendar.getTime());
                CharSequence sumd = (CharSequence) text_date;
                views.setTextViewText(R.id.widget_date, sumd);

                dbManager = new DBManager(context);
                dbManager.open();

                int totalPayed = dbManager.getTotalPayed(text_date);
                CharSequence sumw = Integer.toString(totalPayed);
                views.setTextViewText(R.id.widget_summary, sumw);

                dbManager.close();

                // Tell the AppWidgetManager to perform an update on the current app widget
                appWidgetManager.updateAppWidget(appWidgetId, views);

                // Update the widgets via the service
                context.startService(intent);
                context.startService(intent2);
            }
            super.onUpdate(context, appWidgetManager, appWidgetIds);
        }

        @Override
        public void onReceive(Context context, Intent intent)
        {
                super.onReceive(context, intent);

        }

    }

My actual widget_provider.xml:

 <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/widget"
        android:minHeight="40dp"
        android:minWidth="110dp"
        android:resizeMode="horizontal|vertical"
        android:previewImage="@drawable/logo"
        android:updatePeriodMillis="36000000" >
    </appwidget-provider>

My actual part of AndroidManifest.xml:

   <receiver android:name=".Widget"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/widget_provider" />
            </receiver>

来源:https://stackoverflow.com/questions/29598491/widget-stops-responding-to-clicks-widget-freezes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!