服务没有约束力

时间:2015-07-10 10:55:48

标签: android android-service android-service-binding

我有一个带有集成条形码扫描仪的Android设备。我正在按如下方式设置服务:

public class BarcodeService extends Service {
    private final LocalBinder binder = new LocalBinder();

    public class LocalBinder extends Binder {
        public BarcodeService getService() {
            return BarcodeService.this;
        }
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return binder;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        HandlerThread thread = new HandlerThread("ServiceStartArguments");
        thread.start();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //Get scanner
    }
}

该服务也在AndroidManifest.xml。使用此服务的类是:

public class BarcodeReader extends Activity {
    private BarcodeService barcodeService;
    private boolean isBound = false;

    private ServiceConnection barcodeServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            barcodeService = ((BarcodeService.LocalBinder)service).getService();
            isBound = true;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            barcodeService = null;
            isBound = false;
        }
    };

    @Override
    protected void onStart() {
        super.onStart();

        if (!isBound) {
            Intent intent = new Intent(this, BarcodeService.class);
            startService(intent);
            bindService(intent, barcodeServiceConnection, Context.BIND_AUTO_CREATE);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (isBound) {
            unbindService(barcodeServiceConnection);
        }
    }
}

然而,服务没有约束力,即。 barcodeService始终为空。代码永远不会达到onServiceConnected

我错过了什么?是否有必要使用扩展Activity的类?

1 个答案:

答案 0 :(得分:1)

常见的Android服务疑难解答

只是一些通用的评论和内容,以检查您的服务是否未启动。

Manifest

中定义的服务类

常见的错误不是让清单中的服务(android没有警告你)或者在那里有服务但是拼错了类名。

<manifest ... >
  ...
  <application ... >
      <service android:name=".ExampleService" />
      ...
  </application>
</manifest>

或者你可能在清单(或其中一个清单)中有它,但是在apk中使用的合并之后的最终清单没有服务定义。对于那个检查:

project_folder/app_folder/build/intermediates/manifests/full/...

项目清理和重建可能会有所帮助。

检查bindService返回值

调试时检查bindService调用的布尔返回值,看看服务是否成功启动。

调试活动和服务实施

此外,该服务可能正在运行但未绑定或可能未执行任何操作,因此没有视觉效果它在后台运行。为此,在绑定的ActivityService本身上使用调试器。

检查onBind班级中的onStartCommandService,或者检查那里的onCreate

Activity检查bindServiceServiceConnection等等。

资源

还要检查https://developer.android.com/guide/components/services.html