首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕捉bindService故障

如何捕捉bindService故障
EN

Stack Overflow用户
提问于 2018-07-03 06:55:41
回答 1查看 348关注 0票数 0

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

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

如果我做了bindService,它总是返回true。如果onServiceConnected(as没有像任何其他回调那样良好地运行IntentService,则永远不会调用IntentService),而且我的活动始终处于准备状态。

我找到的唯一工作解决方案是我的IntentService类中的静态变量,它指示服务正在运行。但我相信,采用这种方法是错误的做法,许多人警告说,在某些情况下,这种做法是行不通的或不可预测的。

问题:开发人员期望如何处理bindService调用失败?

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

EN

回答 1

Stack Overflow用户

发布于 2018-07-03 07:04:31

代码语言:javascript
复制
    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为null,则意味着您的服务成功地被绑定到该活动,否则您必须调用create方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51148302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档