Android小部件:在小部件添加到屏幕之前显示配置活动

Met*_*urf 12 android android-widget android-manifest android-preferences sharedpreferences

我有一个Android Widget,它使用Web服务来检索和显示小部件上的数据.窗口小部件具有配置活动extends PreferenceActivity.安装窗口小部件后,配置活动就会立即启动,这是此窗口小部件的所需行为.

问题是,无论何时将小部件添加到主屏幕,小部件都会在配置活动开始/完成之前尝试更新自身,这可能会导致长时间延迟(几秒钟).配置活动应在窗口小部件在添加新窗口小部件时尝试自行更新之前发生.

以下是添加窗口小部件时我在LogCat中看到的事件序列:

  1. Widget.onRecive:action = APPWIDGET_ENABLED
  2. Widget.onEnabled
  3. Widget.onReceive:action = APPWIDGET_UPDATE
  4. Widget.onUpdate:Widget服务已启动.
  5. WidgetService.onStartCommand:潜在的长时间运行工作会延迟配置活动立即显示.
  6. WidgetConfiguration.onCreate
  7. Widget.onReceive:action = APPWIDGET_UPDATE
  8. Widget.onUpdate:Widget Service再次启动
  9. WidgetService.onStartCommand:可能再次执行长时间运行的工作.

发生的事情是,添加窗口小部件后,服务将在显示配置视图之前启动.

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.xxx.xxxwidget"
    android:versionCode="1"
    android:versionName="@string/app_version" >

    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:debuggable="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <receiver android:name="xxxWidget" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>

        <activity android:name="xxxWidgetConfigure" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="xxxWidgetService" />
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)



问题
有没有办法在系统尝试将小部件添加到主屏幕之前强制显示配置活动?

Spi*_*iff 18

来自android文档:http: //developer.android.com/guide/topics/appwidgets/index.html#Configuring

创建App Widget时不会调用onUpdate()方法(系统在启动配置Activity时不会发送ACTION_APPWIDGET_UPDATE广播).首次创建App Widget时,配置Activity负责从AppWidgetManager请求更新.但是,将为后续更新调用onUpdate() - 它仅在第一次被跳过.

但是,这似乎不正确!

我所做的是向SharedPreferences添加一个布尔值,告诉我这个widgetId是否已通过配置.如果没有跳过此更新.在AppWidgetProvider类的onUpdate方法中实现它.

  • 似乎文档已经过时,它们很简单,不会更新它. (8认同)
  • https://code.google.com/p/android/issues/detail?id=3696报告了此问题 (2认同)
  • 还是有这个问题. (2认同)