[Blankj/AndroidUtilCode][BUG] 1.29.x 汇总

2024-07-15 783 views
4
版本变更

重构经过之前 27 和 28 版本的多次 BUG 修复已趋于稳定,欢迎大家使用 1.29.x。

BUG 描述模板

拷贝如下模板到下方来提交 BUG

## 描述 Bug

简洁地描述下 Bug。
- AndroidUtilCode 的版本:例如 utilcode:1.28.0 或 utilcodex:1.28.0
- 出现 Bug 的设备型号: 例如 Nexus 5X
- 设备的 Android 版本:例如 API 27

## 相关代码

```
put your code here
```

## 异常堆栈

```
put the stack of crash here
```

## 截图

如果有的话请添加屏幕截图以帮助解释问题。

回答

5
描述 Bug
  • AndroidUtilCode 的版本:1.29.0
  • 设备的 Android 版本:例如 API30 androidR 上toast.getView =null导致无法弹出toast
0

@lxx512511477 我 30 的模拟器怎么正常显示,你什么设备?

2

我使用真机测试的。 而且这个问题好像是官方API文档有说明的。 https://developer.android.google.cn/preview/features/toasts?hl=zh-cn 我的临时处理方案就是: 在你的ToastUtils的show()方法的里面直接加了个版本判断,大于Q版本直接用ToastFactory.MakeNormalToast()显示了然后return了。 大佬看下怎么处理合适。

7
描述 Bug

BusUtils重复发送

  • AndroidUtilCode 的版本:例如 utilcodex:1.29.0
发送日志
2020-07-02 10:12:14.791 11096-11181/com.iyoyi.itky I/BUS: ### get config ###
2020-07-02 10:12:15.262 11096-11096/com.iyoyi.itky I/BUS: register: com.iyoyi.itky.ui.main.MainActivity
2020-07-02 10:12:15.908 11096-11187/com.iyoyi.itky I/BUS: post sticky
2020-07-02 10:12:15.912 11096-11096/com.iyoyi.itky I/BUS: ### main activity ###
2020-07-02 10:12:16.619 11096-11096/com.iyoyi.itky I/BUS: register: com.iyoyi.itky.ui.main.HomeFragment
2020-07-02 10:12:16.620 11096-11096/com.iyoyi.itky I/BUS: ### home fragment ###
2020-07-02 10:12:16.662 11096-11096/com.iyoyi.itky I/BUS: ### main activity ###
2020-07-02 10:14:34.650 11096-11253/com.iyoyi.itky I/BUS: ### get config ###
2020-07-02 10:14:34.757 11096-11096/com.iyoyi.itky I/BUS: register: com.iyoyi.itky.ui.main.MainActivity
2020-07-02 10:14:34.758 11096-11096/com.iyoyi.itky I/BUS: ### main activity ###
2020-07-02 10:14:34.973 11096-11210/com.iyoyi.itky I/BUS: post sticky
2020-07-02 10:14:35.061 11096-11096/com.iyoyi.itky I/BUS: register: com.iyoyi.itky.ui.main.HomeFragment
2020-07-02 10:14:35.062 11096-11096/com.iyoyi.itky I/BUS: ### home fragment ###
2020-07-02 10:14:35.097 11096-11096/com.iyoyi.itky I/BUS: ### main activity ###
2020-07-02 10:14:35.377 11096-11096/com.iyoyi.itky I/BUS: ### home fragment ###
2020-07-02 10:14:35.381 11096-11096/com.iyoyi.itky I/BUS: ### main activity ###
5

@lk4403 你这让我看日志反推你的使用方式么?详细描述下呀

5

我发送了个粘性事件,然后打开界面A并注册,能正常接收,然后打开界面B并注册,B也能正常接收,但是,界面A会再一次收到这个事件,如果我再打开界面C并注册,C能正常接收,但界面A、B会同样再一次接收事件,也就是A3次,B2次,C1次 https://github.com/lk4403/BusUtilsDemo

6

难道 EventBus 不是这样的么?黏性时间只是可以在订阅的时候消费而已,你之后发送本来就可以收到呀,除非你取消订阅了才收不到啊

7

EventBus没用过,我只是觉得奇怪,我只发送了一次事件而已,却因为后面有新的界面注册了这个事件而导致原来已经注册过的界面重复接收了事件。如果说粘性事件就是这样的那就算了。

9

你又没注销掉,那当然能接收到了

0

刚改了EventBus试了下,EventBus并不是这样的,已经接收过了的界面就不会再接收了。

4

可能你描述的有问题,你可以主要代码放上来我了解下,然后你看下 bus 插件的版本是否是最新的 2.6 版本

6

https://github.com/lk4403/BusUtilsDemo 这个链接里,第一次提交是BusUtils的,插件版本确实是2.6了,第二个提交是EventBus的。

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        EventBus.getDefault().postSticky("Bus Event")
        Handler().postDelayed({
            startActivity(Intent(this, MainActivity::class.java))
            finish()
        }, 666)
    }
}
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        findViewById<View>(R.id.b1).setOnClickListener(listener) // 添加fragment 1
        findViewById<View>(R.id.b2).setOnClickListener(listener) // 添加fragment 2
        findViewById<View>(R.id.b3).setOnClickListener(listener) // 添加fragment 3

        EventBus.getDefault().register(this)
    }

    override fun onDestroy() {
        EventBus.getDefault().unregister(this)
        super.onDestroy()
    }

    @Subscribe(
        threadMode = ThreadMode.MAIN,
        sticky = true
    )
    fun onEvent(event: String) {
        append(mItemContainer, "$event - ${mItemCount++}")
    }
}

class TabFragment : Fragment() {
    private lateinit var mItemContainer: LinearLayoutCompat
    private var mItemCount = 0

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val tabView = inflater.inflate(R.layout.fragment_tab, container, false)
        tabView.findViewById<TextView>(R.id.title).text = arguments!!.getString("title")
        mItemContainer = tabView as LinearLayoutCompat
        return tabView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        EventBus.getDefault().register(this)
    }

    override fun onDestroyView() {
        EventBus.getDefault().unregister(this)
        super.onDestroyView()
    }

    @Subscribe(
        threadMode = ThreadMode.MAIN,
        sticky = true
    )
    fun onEvent(event: String) {
        append(mItemContainer, "$event - ${mItemCount++}")
    }
}
1

新版本 1.30.0 已发布