0

我有一些可以运行或停止的前景 IntentService。如果它是可见的,我需要在 Activity 上反映它的进度(当前状态非常复杂)。

我没有找到可靠和好的方法来确定我的 IntentService 是否正在运行并准备好绑定到我的 Activity。

如果我做bindService它总是返回 true。如果 IntentService 未运行,则永远不会调用onServiceConnected(以及任何其他回调),并且我的活动始终保持在准备状态。

我发现的唯一可行的解​​决方案是我的 IntentService 类中的静态变量,它指示服务正在运行。但我认为使用这种方法是不好的做法,许多人警告说它在某些情况下无法工作或不可预测。

问题: Android 开发者希望如何处理 bindService 调用失败?

特殊情况:如果我们尝试绑定到现在未运行或处于某种中间状态(例如关闭等)的服务,该怎么办。

4

1 回答 1

0
    private UploadService.Binder mServiceBinder;

    @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            createService();
        }

    private void createService() {
            if (mServiceBinder == null)
                bindService(new Intent(this, UploadService.class),
                        mConnection,
                        Context.BIND_AUTO_CREATE);
        }

private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mServiceBinder = ((UploadService.Binder) service);
            ((UploadService.Binder) service).getService().setCallback(DashFragment.getInstance());
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mServiceBinder = null;
        }
    };
        @Override
        public void onDestroy() {
            super.onDestroy();
            if (mServiceBinder != null) {
                unbindService(mConnection);
                mServiceBinder = null;
            }
        }

如果 mServiceBinder 不为空,则意味着您的服务已成功绑定到活动,否则您必须调用创建服务方法。

于 2018-07-03T07:04:31.897 回答