• c++通过jnihelper调用java方法刷新androidUI的注意事项


     2dx android项目需接入第三方sdk完成支付,玩家点击充值界面,通过jnihelper来调用java的方法并弹出android组件界面,之前采用直调的简单方法,顺利的把参数传到java层,但后面的界面处理很容易出现

    Can't create handler inside thread that has not called Looper.prepare() 

    的bug日志,楼主对java不懂,只得goo和baidu,找不到确切的解决方法,但很多人都提到了一点,Android的UI线程并不安全,它的界面更新操作必须要在Activity主线程执行。虽然不太理解这层意思,但大概猜到是跨线程调用的问题。

    到这,我基本上可以确定,cocos2d-x安卓项目,ActivityUI主线程跟c++的opengl线程是不同的,两者分属不同线程,也就是说,通过Jnihelper直接调用java层方法来刷新UI界面是极度危险的操作。

    我采取的解决办法很简单,用Activity 的runOnUiThread方法来规避这个问题,

    如下图 pay方法会被c++调用,performPay方法包装在runOnUiThread内调用,这样不管performPay内部做任何事情,它的执行都在Android主线程的范围

  • 相关阅读:
    python,可变参数
    python process,queue
    python 进程池Pool
    python 中的set与list,tuple
    python 元组tuple
    深夜装ubuntu
    python中的协程
    python Queue在两个地方
    (转载)Spring mvc中@RequestMapping 6个基本用法小结
    数据库jdbc连接--【DRP】
  • 原文地址:https://www.cnblogs.com/howeho/p/3288998.html
Copyright © 2020-2023  润新知