91市场版本打回的bug闲聊

2024-03-23 14:20
文章标签 市场 版本 bug 91 闲聊 打回

本文主要是介绍91市场版本打回的bug闲聊,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

今天收到91市场打回来的列表,其中有4个问题,第一个是敏感词,第二个是更新的细节问题,第三个是一个没看懂的bug描述,第四个是服务器策略返回数据导致的误解。第二个问题真是坑了我很久。稍微讲下更新的细节问题。

问题描述

大致的意思是:打开程序后,跳出提示有新版本,然后马上出现了用户登录界面,当输入密码登录或者取消后返回时又出现了升级提示。按照91的流程,在有更新提示的界面和登录的界面不能并行出现,必须等提示更新的界面操作完毕后才能出现登录界面。


大致就是这个图了。

SDK版本说明

我使用的91SDK是3.6.2.1版本,其中说明文档中明确写明,这个版本的NdInit函数自己实现了版本更新的检测,无需人工干预。这其实挺好的,能少操作自然少操作嘛,多做多错、少做少错的道理是更古不变的。

程序逻辑

这里仅做下91SDK接入到登录的说明。在cocos2dx的Android上具体接入可以略微参考下自之前的这篇文章:cocos2dx在Android下如何接入91SDK

SDK的初始化工作是在主Activity启动时onCreate中做的,C++的代码不能在这之前被调用。而登录的操作是在C++代码中做的,所以初始化应该在登录之前。这里有个关键问题是,是否初始化成功后才检测更新?

几个小坑

要解决这个问题,其实只要弄明白,是初始化成功后调用的版本检测还是之前?这些操作是同步的还是异步的?是否可以通过用户点击立即更新和取消的操作来控制登录框的出现?

91的初始化操作应该是异步实现的,因为有异步的回调来通知初始化操作是否成功。而正是因为这个异步的操作,导致我一下子没反应过来。并且,3.2.6.1的SDK中移除了ndAppVersionUpdate函数,导致你压根就无法得到用户的操作结果。

解决思路

首先想到,是否SDK初始化成功的异步回调,是在openglView的线程启动之后才回来的,也就是说,如果这样的假设成立,就可以在C++中设定一个布尔变量,用来控制是否允许向NDK发送登录的请求。初始化为false,在SDK初始化完成后,通过AndroidNDKHelper通知C++把这个值设置为true,然后再允许其登录。

试验了下,JAVA代码中,在OnInitCompleteListener的成功通知中打一个断点,再在登录请求处打一个断点。果然,在更新界面出现后,程序并没有跑到OnInitCompleteListener中,而是过了一会儿,自动登录的回调调用到了登录的函数中,看来,这个初始化成功的通知异步得厉害啊!

采用之前的思路,设了个变量控制,就搞定了,不会又弹出更新提示又弹出登录框了。

其他闲话

第一次提交到91,其实问题还是挺多的,比如,当时友盟的更新渠道没有关闭,导致91市场的版本也会随着另外市场的版本同步提醒更新,但是因为91有要求包名需要不同,所以其实是更新不了的,即使能下,下过来后安装好后其实是一个全新的程序。

关于Java中的界面线程和cocos2dx中使用的openglView线程貌似不是一个东西,之前一直以为界面线程就一个,当然这个我还没有去考证过,只是这么猜测,因为之前的文章中有提到当在JAVA中调用91的登录请求,完成后回调到C++中的时候,如果直接操作openglView中的UI会使程序崩溃,而且放到UIThread中去跑也不行。当时傻乎乎以为这个UI和opengl的UI是一个线程,从测试的结果来看应该不是。Cocos2dxActivity有实现runOnGLThread的函数,这个应该才是正解。

这篇关于91市场版本打回的bug闲聊的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838562

相关文章

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

InnoDB的多版本一致性读的实现

InnoDB是支持MVCC多版本一致性读的,因此和其他实现了MVCC的系统如Oracle,PostgreSQL一样,读不会阻塞写,写也不会阻塞读。虽然同样是MVCC,各家的实现是不太一样的。Oracle通过在block头部的事务列表,和记录中的锁标志位,加上回滚段,个人认为实现上是最优雅的方式。 而PostgreSQL则更是将多个版本的数据都放在表中,而没有单独的回滚段,导致的一个结果是回滚非

JeecgBoot 升级springboot版本到2.6.0

1. 环境描述 Jeecgboot 3.0,他所依赖的springboot版本为2.3.5Release,将springboot版本升级为2.6.0。过程全纪录,从2开始描述。 2. 修改springboot版本号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare