草庐IT

Android java.lang.IllegalArgumentException : Service not registered

coder 2023-06-05 原文

我有一个看起来像这样的设置:

class MyFragment implements SomeEventListener {

    Application mAppContext;    

    boolean mBound;
    boolean mDidCallUnbind;
    MyIBinder mBinder;
    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBound = true;
            mBinder = (MyIBinder) service;
            mBinder.getThings();...
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mDidCallUnbind = false;
            mBound = false;
            mBinder = null;
        }
    };

    ...

    @Override
    public void onSomeEvent() {
        mAppContext.bindService(...);
    }

    void unbindService() {
        if (mBound && !mDidCallUnbind) {
            mDidCallUnbind = true;
            mAppContext.unbindService(mConnection);
        }
    }

    @Override
    public void onPause() {
        unbindService();
        super.onPause();
    }
}

但是,我仍然不时看到标题中的错误:java.lang.IllegalArgumentException: Service not registered are generated when unbindService() is called .我错过了什么愚蠢的事情,还是还有更多的事情发生?我应该注意,可能存在不止一个相同的 fragment 。

编辑

由于实际上似乎没有人在阅读代码,所以让我解释一下。 unbindService() 不会调用 Context.unbindService(ServiceConnection) 除非服务已绑定(bind) (mBound) 并且 它在 onServiceDisconnected(...) 回调因之前可能对 unbindService() 的调用而被命中之前,之前没有被调用过。

请记住,在任何情况下,Android 会为您取消绑定(bind)您的服务,以使该服务变为未绑定(bind)但不会调用 onServiceDisconnected 从而使我处于陈旧状态?

另外,我正在使用我的应用程序上下文进行初始绑定(bind)。假设如下:

@Override
public void onCreate() {
    mApplication = getContext().getApplicationContext();
}

最佳答案

使用 mIsBound里面 doBindService()doUnbindService()而不是在ServiceConnection实例。

ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mBinder = (MyIBinder) service;
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mBinder = null;
    }
}; 

...

public void doBindService() {
    mIsBound =bindService(new Intent(this, MyService.class),
        mConnection, Context.BIND_AUTO_CREATE); 
}

public void doUnbindService() {
    if (mIsBound) {
        unbindService(mConnection);
        mIsBound = false;
    }
}

这就是 http://developer.android.com/reference/android/app/Service.html 中的处理方式

关于Android java.lang.IllegalArgumentException : Service not registered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079909/

有关Android java.lang.IllegalArgumentException : Service not registered的更多相关文章

  1. java - 为什么 ruby​​ modulo 与 java/other lang 不同? - 2

    我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.

  2. Ruby 看不到 NLS_LANG 环境变量 - 2

    我在CentOS上运行一个ruby​​脚本,并通过rvm(1.9.3)安装了ruby​​。我已经在.bash_profile中设置了NLS_LANG变量。[app@boxstasis]$echo$NLS_LANGen_US.UTF-8[app@boxstasis]$whichruby~/.rvm/rubies/ruby-1.9.3-p194/bin/ruby然而,当试图通过ruby​​(oci8驱动程序所做的)访问它时,它找不到它:1.9.3-p194:001>ENV['NLS_LANG']=>nil访问其他变量似乎有效:1.9.3-p194:004>ENV['USER']=>"app

  3. ruby - 在 JRuby 中,如何确定导致 java.lang.ThreadDeath 的原因? - 2

    在为一些与JRuby中的临时文件交互的代码运行单元测试时,我有时会得到以下信息:Exception:java.lang.ThreadDeaththrownfromtheUncaughtExceptionHandlerinthread"Thread-6395"它似乎没有引起任何问题,但这是怎么回事,我如何确定它发生在哪里?我尝试打开-d,但这并没有给我异常的堆栈跟踪。 最佳答案 FWIW:这可能与http://jira.codehaus.org/browse/JRUBY-7074有关.我偶尔会在不使用反引号但调用系统的JRuby程序中

  4. 报java.lang.AssertionError错误: - 2

    1.在使用Assert.assertEquals时报一个错误:2.首先,我们的明白Assert的用法:assert​如果为true,则程序继续执行。​如果为false,则程序抛出AssertionError,并终止执行assert:​如果为true,则程序继续执行。​如果为false,则程序抛出java.lang.AssertionError,并输出。ctrl点进Assert.assertEquals发现进行的是判断两个Object类型的值,他们两个比较的是引用地址是否相等,并没有对内容进行比较:如果两者一致,程序继续往下运行.如果两者不一致,中断测试方法,抛出异常信息AssertionFai

  5. javascript - 如何动态设置 HTML lang 属性? - 2

    如何在Web应用程序中动态设置HTML的“lang”属性?我尝试使用jQuery如下插入“lang”属性:$(document).ready(function(){$("html").attr("lang",language);//'language'valueisretrievedfromacookie});使用控制台/警报,'lang'属性看起来已按预期设置。但是,如果您看到生成的源代码(查看源代码),则根本没有设置“lang”。要求是屏幕阅读器必须能够动态识别语言。如果有任何其他解决方案可以使屏幕阅读器动态识别语言,那就太好了。感谢大家在线发表评论!

  6. javascript - Javascript 中的 Lang.Class - 2

    我正在尝试使用GJS(GnomeJavascript)开发GnomeShell扩展,但是,我遇到了Lang库(我认为它是一个库,如果我不正确的话)。但是我在网上找不到任何关于它的资源。在代码中它看起来像这样:constLang=imports.lang;constObjectA=newLang.Class({...});我在哪里可以找到有关它的文档?它是Gnome库吗?Mozilla库? 最佳答案 它是gjs的内置模块--参见modules/lang.js.它包括两个主要部分:bind()(使“this”指向闭包中的逻辑对象的助手)

  7. javascript - 未捕获的类型错误 : lang is not a function - 2

    这个问题在这里已经有了答案:JSfunctionnamed`animate`doesn'tworkinChrome,butworksinIE(3个答案)关闭6年前。在我的HTML中,我在script标签中定义了lang函数并添加了“TestFire!”单击时必须调用lang的按钮:TestingFunctionsfunctionlang(){alert("Hello,World!It'sJavaScriptthistime");}但是,如果我点击按钮,我会得到这个错误:UncaughtTypeError:langisnotafunction但是,如果我将函数名称从lang更改为任何其他

  8. go - 在 go lang 中对字符串进行排序 - 2

    如何在golang中对4.3.4、4.3.30等字符串进行排序。golang中有一个名为“sort”的方法?问题是使用此方法4.3.30在4.3.4之前打印。我希望4.3.30在4.3.4之后打印。这种排序的逻辑是什么?注意-我只需要一个逻辑天气,它将在go或java中。提前致谢。供您引用,go中的“排序”程序:packagemainimport"sort"import"fmt"typeByLength[]stringfunc(sByLength)Len()int{returnlen(s)}func(sByLength)Swap(i,jint){s[i],s[j]=s[j],s[i]}

  9. json - 我如何在 Go Lang 中使用多个元素对 JSON 进行编码 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭5年前。Improvethisquestion我需要咨询或示例代码,了解如何向客户发送JSON中的多个元素。谢谢!我需要下一个JSON结构:{{"id":123,"first_name":"Demo","last_name":"User","time":"2017-07-03T16:36:41.4101847Z","count":1,"payout":"839`"},{"id":124,"first_name":"Demo","last_na

  10. git - 我正在尝试安装 Go lang 包,但它给出了这样的错误::错误:以下未跟踪的工作树文件将被 merge 覆盖 - 2

    我的Gointellisense自动完成功能不工作,我正在尝试安装gocode和gopkg但它失败了,并给出了类似git的错误:::cd/home/poojat/go/src/golang.org/x/tools;gitpull--ff-onlyerror:Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge:CONTRIBUTING.mdREADMEblog/blog.gocmd/bundle/main.gocmd/callgraph/main.gocmd/callgraph/main_test.gocmd/call

随机推荐