java.lang.IllegalArgumentException: Receiver not registered
錯誤提示:java.lang.IllegalArgumentException: Receiver not registered。
顧名思義就是Receiver沒有被注冊,這是由于取消了沒有注冊的Receiver導致的錯誤。
我們使用Receiver時必須保證注冊(register)和反注冊(unregister)成對出現。
遇到這種問題時,你需要檢查下自己代碼中注冊和反注冊的代碼,看下是否存在多次調用unregister的時候。
很多時候都是想當然認為會那樣,但是程序中可能有我們未預料的出口,比如我的程序中在onCreate注冊,finish取消注冊,理論進入、退出時應該成對出現,但實際報錯了!分析到最后是原布局中使用了TabActivity、GroupActivity等多種結構嵌套,退出當前Activity時,finish方法被執行了多次。
所以建議Receiver注冊和反注冊的過程放到onResume和onPause過程中,兩個理由:
(1)這兩個過程肯定會成對出現,因此可以避免上述錯誤。
(2)一般我們使用Receiver是為了接受通知來更改UI(特殊情況除外),而對于Activity(UI)界面位于后臺時,沒必要去接受通知更改UI。
示例:
在 Adroid2.1 和 Adroid2.2 設備上,如果 Activity 中使用到 ViewFlipper 控件,進行橫豎屏切換操作時會發生如下錯誤信息
java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper$1@43dee3c0
這是由于 onDetachedFromWindow() 莫名其妙地在 onAttachedToWindow() 之前被調用了。據說是一個 Bug ,不知在最新的 2.3 上是否修正。
下面提供一個很簡單的解決方案,重寫 ViewFlipper 的 onDetachedFromWindow() 方法
@Override
protected void onDetachedFromWindow () {
try {
super.onDetachedFromWindow();
}
catch (IllegalArgumentException e) {
stopFlipping();
}
}
轉載于:https://www.cnblogs.com/seven-sky/p/4821604.html
總結
以上是生活随笔為你收集整理的java.lang.IllegalArgumentException: Receiver not registered的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Liunx UID and GID
- 下一篇: 你为什么不分享