【问题标题】:Unable to start service [service name] with null无法使用 null 启动服务 [服务名称]
【发布时间】:2011-06-08 10:57:23
【问题描述】:

我最近编写了一个 Android Widget 并在 Emulator 和我的 Galaxy S 上对其进行了测试,它在两者上都运行良好,在我将相同的内容发布到 android 市场之后,现在我收到了一些错误报告。

我在 Widget 类的 onUpdate 中声明一个服务,如下所示:

if (appWidgetIds != null) {
    final int N = appWidgetIds.length;

    // Perform this loop procedure for each App Widget that belongs to
    // this
    // provider
    for (int i = 0; i < N; i++) {
        // Start Service for each instance
        int appWidgetId = appWidgetIds[i];
        Intent active = new Intent(context, DialerService.class);
        active.setAction("Start");
        active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                appWidgetId);

        context.startService(active);
    }
}

有些人得到的错误是:

java.lang.RuntimeException: Unable to start service dialer.impact.DialerService@45f926f0 with null: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3282)
at android.app.ActivityThread.access$3600(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2211)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
**at dialer.impact.DialerService.onStart(DialerService.java:18)**
at android.app.Service.onStartCommand(Service.java:420)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3267)
... 10 more

错误在ServiceClass 的第 18 行声明了一个NullPointerException,它是这样的:

@Override
public void onStart(Intent intent, int startId) {
    //Line 18th 
            String command = intent.getAction();
    int appWidgetId = intent.getExtras().getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID);
    RemoteViews remoteView = new RemoteViews(getApplicationContext()
            .getPackageName(), R.layout.main);
    AppWidgetManager appWidgetManager = AppWidgetManager
            .getInstance(getApplicationContext());
}

第 18 行是String command = intent.getAction();

intent 为空的原因可能是什么 请帮忙

【问题讨论】:

    标签: android android-widget nullpointerexception android-service


    【解决方案1】:

    根据onStart()的文档(实际上是onStartCommand()但参数相同):

    intent 提供给 startService(Intent) 的 Intent,如给定。 这可能为空,如果服务正在 进程结束后重新启动 离开了,它之前已经回来了 除了 START_STICKY_COMPATIBILITY。

    【讨论】:

    • 谢谢,好像是这样,我认为人们使用的 Task Killer 应用程序可能正在扼杀服务
    • 那么服务重启时如何处理呢?它总是出错
    • 有没有办法避免这种情况。我在我的应用中遇到了与 Google Analytics 相同的问题。
    【解决方案2】:

    您好,只是补充一下,所以解决方法是在 getAction() 之前添加一个 if(intent!=null)?如果我这样做,该服务会在以后自行正常启动吗?这意味着操作系统实际上可以帮助我在无效意图的情况下正确启动服务。我害怕最终陷入服务根本无法启动的情况。

    【讨论】:

    • 是的,如果你对意图进行空检查,你应该没问题
    • 如果你检查空值,它不会在检查时抛出任何异常..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多