0

我在启动服务时得到了 NPE。我刚刚浏览了 android 开发者网站上的服务教程。

日志显示无法恢复活动...

@Override
protected void onResume() {
    super.onResume();
    CustomIntentService cis = new CustomIntentService();
    Intent intent1 = new Intent(this, CustomIntentService.class);
    intent1.putExtra("NUM", 1);
    cis.startService(intent1);
}

我的服务是:

public class CustomIntentService extends IntentService {
    private final static String TAG = "CustomIntentService";

    public CustomIntentService() {
        super("CustomIntentService");
        Log.d(TAG,"out CustomIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(TAG, "onHandleIntent");
        Log.d(TAG, "service num = " + intent.getIntExtra("NUM", 0));
        if (Looper.getMainLooper() == Looper.myLooper()) {
            Log.d(TAG, "In main ui thread");
        } else {
            Log.d(TAG, "In worker thread");
        }
    }   
}
4

1 回答 1

2

将 onResume 的代码更改为以下内容:

@Override
protected void onResume() {
    super.onResume();
    //CustomIntentService cis = new CustomIntentService();
    Intent intent1 = new Intent(this, CustomIntentService.class);
    intent1.putExtra("NUM", 1);
    startService(intent1);
}

这应该可以解决问题,记住意图知道要启动哪个服务,并且 startService() 在上下文中被调用。所以这里活动的实例将是上下文。

还,

由于 Service 是一个组件,所以你应该在 AndroidManifestFile 中声明它

<service 
    android:name=".CustomIntentService">
</service>

*注意:CustomIntentService 应该在当前目录下,或者您也可以提供绝对路径。

你可以参考这个

于 2013-04-27T13:40:41.663 回答