Tôi có một Widget Android sử dụng các dịch vụ web để truy xuất và hiển thị dữ liệu trên widget. Tiện ích con có hoạt động cấu hình extends PreferenceActivity
. Hoạt động cấu hình sẽ khởi động ngay khi tiện ích được cài đặt, đó là hành vi mong muốn cho tiện ích con này.Android Widget: Hiển thị hoạt động cấu hình trước khi widget được thêm vào màn hình
Sự cố là, bất cứ khi nào tiện ích được thêm vào màn hình chính, tiện ích sẽ tự cập nhật trước khi hoạt động cấu hình được bắt đầu/hoàn thành, có thể dẫn đến trì hoãn lâu (vài giây). Hoạt động cấu hình sẽ xảy ra trước khi tiện ích cố gắng tự cập nhật bất cứ khi nào một tiện ích con mới được thêm vào.
Đây là chuỗi các sự kiện mà tôi nhìn thấy trong LogCat khi một widget được thêm vào:
- Widget.onRecive: action = APPWIDGET_ENABLED
- Widget.onEnabled
- Widget.onReceive: hành động = APPWIDGET_UPDATE
- Widget.onUpdate: Dịch vụ tiện ích được bắt đầu.
- WidgetService.onStartCommand: Tác vụ chạy dài có khả năng sẽ làm chậm hoạt động cấu hình hiển thị ngay lập tức.
- WidgetConfiguration.onCreate
- Widget.onReceive: action = APPWIDGET_UPDATE
- Widget.onUpdate: Widget dịch vụ được bắt đầu một lần nữa
- WidgetService.onStartCommand: có khả năng dài chạy công việc được thực hiện một lần nữa.
Điều đang xảy ra là khi tiện ích được thêm, dịch vụ sẽ khởi động trước khi chế độ xem cấu hình được hiển thị.
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>
Câu hỏi
Có cách nào để buộc các hoạt động cấu hình được hiển thị trước khi hệ thống cố gắng để thêm các widget màn hình chủ?
Tôi gặp sự cố quen thuộc. Cuộc gọi đến phương thức update(), xảy ra trước khi hoạt động cấu hình được hiển thị. Tôi không tìm thấy cách nào để thay đổi hành vi này. – mrd