【问题标题】:Android appwidget crashes process com.android.settings on android v2.1, need work aroundAndroid appwidget 在 android v2.1 上崩溃进程 com.android.settings,需要解决
【发布时间】:2011-08-16 19:08:14
【问题描述】:

我正在开发一个 android appwidget,它在我尝试过的所有 android 版本(模拟器 1.5、1.6、2.3)中都能正常工作,但不是 2.1(物理设备,LG GT540 升级到 2.1)。我在三星 GT I5801 上对其进行了测试,使用 2.1 操作系统,并且它工作正常,可能是因为 2.1 版本的特定版本较旧(或者三星自己添加了修复程序)。

顺便说一句,我认为这是对我所指的确切错误的修复:
https://android.googlesource.com/platform/packages/apps/Settings/+/7be5137e12ba58cebae634f640379599acdb491a

这是一个讨论相同问题的旧线程: Android:NPE while trying to activityForResult with ACTION_APPWIDGET_PICK intent

当我尝试在主屏幕上加载小部件时(实际上是在我单击“小部件”按钮时发生),我收到以下错误:

应用程序设置(进程 com.android.settings)已停止 不料。请再试一次。

带有“强制关闭”按钮。

请参阅下面的 logcat 输出。顺便说一句,当我的 appwidget 尚未安装时,这不会发生,它也会发生在 2.1 模拟器上。

我到处搜索,有很多人提到这一点。开发人员,但主要是用户,一般的结论是这是 android 2.1 操作系统中的一个错误。例如,即使是 google 自己的地图 appwidget 也会导致此崩溃。

现在我知道有些 appwidget 在 2.1 上运行良好。所以必须有一个解决方法。我只是不知道是什么。我在这里阅读了有关 appwidget 需要多个小部件才能使其工作的建议(抱歉,我现在找不到链接)。我现在实际上有 2 个文本视图,但我也尝试了一个文本视图和一个图像按钮。两者都不起作用。

我当然可以避免 2.1,但我更希望这个 appwidget 可以在尽可能多的 android 版本上工作(我目前还不能升级我的 GT540),而且我不愿意接受失败。 :-)

Logcat 堆栈跟踪:

I/ActivityManager(   58): Starting activity: Intent { act=android.appwidget.action.APPWIDGET_PICK cmp=com.android.settings/.AppWidgetPickActivity (has extras) }
W/InputManagerService(   58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44d5d458
D/AndroidRuntime(  229): Shutting down VM
W/dalvikvm(  229): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime(  229): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  229): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.AppWidgetPickActivity}: java.lang.NullPointerException
E/AndroidRuntime(  229):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime(  229):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime(  229):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime(  229):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime(  229):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  229):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  229):    at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(  229):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  229):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  229):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(  229):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(  229):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  229): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  229):    at com.android.settings.ActivityPicker$IconResizer.createIconThumbnail(ActivityPicker.java:364)
E/AndroidRuntime(  229):    at com.android.settings.ActivityPicker$PickAdapter$Item.<init>(ActivityPicker.java:226)
E/AndroidRuntime(  229):    at com.android.settings.AppWidgetPickActivity.putAppWidgetItems(AppWidgetPickActivity.java:185)
E/AndroidRuntime(  229):    at com.android.settings.AppWidgetPickActivity.putInstalledAppWidgets(AppWidgetPickActivity.java:226)
E/AndroidRuntime(  229):    at com.android.settings.AppWidgetPickActivity.getItems(AppWidgetPickActivity.java:207)
E/AndroidRuntime(  229):    at com.android.settings.ActivityPicker.onCreate(ActivityPicker.java:98)
E/AndroidRuntime(  229):    at com.android.settings.AppWidgetPickActivity.onCreate(AppWidgetPickActivity.java:63)
E/AndroidRuntime(  229):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  229):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
E/AndroidRuntime(  229):    ... 11 more
I/Process (   58): Sending signal. PID: 229 SIG: 3
I/dalvikvm(  229): threadid=7: reacting to signal 3
I/dalvikvm(  229): Wrote stack trace to '/data/anr/traces.txt'
E/ActivityThread(   58): Failed to find provider info for android.server.checkin
E/Checkin (   58): Error reporting crash: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/crashes
W/ActivityManager(   58): Activity idle timeout for HistoryRecord{44c1fd30 com.android.settings/.AppWidgetPickActivity}

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.example.exampleapp"
    android:versionCode="1"
    android:versionName="1.0"
    android:debuggable="true">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application 
       android:label="exampleapp">
           <receiver 
               android:name="ExampleWidgetProvider" >
               <intent-filter>
                  <action 
                      android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
                <meta-data 
                    android:name="android.appwidget.provider"
                    android:resource="@xml/example_appwidget_info" />
           </receiver>
     </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

【问题讨论】:

标签: android android-appwidget


【解决方案1】:

我建议您非常仔细地检查应用程序清单,因为您的小部件应用程序似乎导致选择器在您的应用程序实际实例化之前死亡。那时清单就是所有正在使用的东西。您的应用程序元素应该有一个带有意图过滤器的接收器,用于处理 android.appwidget.action.APPWIDGET_UPDATE,并且在接收器元素内有一个元数据元素,用于声明提供者资源。

【讨论】:

  • 我在原始帖子中添加了清单。此清单在 1.5 和 2.3 等其他版本中运行良好。
  • 我不认为清单是问题所在。这是 android v2.1 中的一个错误,我正在寻找解决方法。
  • +1 因为即使建议对这个问题不起作用,它仍然是一个有用的建议
【解决方案2】:

这个问题前段时间自动消失了。其他地方建议的解决方法是在您的 appwidget 中有多个小部件。我实际上是这样做的,但问题仍然存在。但随后消失了。我一直在扩展我的 appwidget 添加功能和另一个小部件(即 3)。

如果我找到时间,我会仔细检查我的修改,看看问题在什么时候消失了。然后,我希望能更好地回答我自己的问题,而不是“添加更多的东西直到它自行修复”。 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2011-11-30
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多