UnityActivity与普通Android Activity数据通信

此次本以为一个简单的传值通信却研究了2天才找出最终解决方案,实在是丢脸,本次传值发生在Unity3D的UnityActivity里面,,通常我们做法是使用

/**
*BaiduMapUnity 为场景的对象名
*GetContainer  为场景脚本里面执行的方法
*json 为传递的json字符串
*/
UnityPlayer.UnitySendMessage("BaiduMapUnity", "GetContainer",json)  以下就简称sendMsg

本来以为简简单单调用这个方法就可以万无一失,谁知道在传值过程中遇到很多麻烦,反正就是传不过去,没有调用方法,经过探索发现以下几点:

  • sendMsg方法不会在原生Activity里面即时产生效果,如果多次发送,消息会暂存入一个栈中,待回到UnityActivity时才会开始按顺序调用。
  • 传值时不能使用StartActivity进入新UnityActivity实例;你可以测试下,sendMsg时Activity栈中必要有一UnityActivity实例,而每次跳转时这个UnityActivity会进行新实例,至于UnityActivity是新创建对象并销毁栈中同类已有对象还是两者都保留,目前没做探究,只是这次传值必然会失效,伴随着界面的体现就是能看到Unity的默认过度动画然后是作者制作的Unity界面。
    但是话说回来其遵循部分Android规则,可以在清单文件中配置singleTask,理论上如此UnityActivity不会创建新的实例,直接栈中在其上面的所有Activity实例撸掉,这时候发送的话栈中有实例且startActivity后依旧是前面的UnityActivity实例所以会奏效,但是这个结论不作确定,因为没弄明白其为何仍然会走onCreate方法,还有一种使其奏效方式即msgSend 并立即finish掉当前原生Activity进入UnityActivity,使之进入活动状态,这会立即显现效果,所以我一直觉得singleTask在源码处理时会跟finish有重叠区域。
    综合来看就是UnityActivity在栈中不能出现第二个实例化,否则此次发送数据无效,还有finish与singleTask方法我觉得不太稳定,因为如果遇到内存泄漏原生Activity并不能轻松的结束掉,所以效果可能会失常,这在稍微大点的工程里很容易出现,不管你是几年的安卓,不会处理内存泄漏就是会发生。
  • 由于UnityActivity我单独开了一个进程,所以每次跳转时其若初始化,则整个应用多个进程内存中的全局变量、静态变量之类的临时数据重置为定义时的值(注意是进程,不是线程,不知道的先去百度如何给组件指定进程),所以以下Unity调android的方法别想了,Unity拿不到返回值,你也没数据可以传,所以这个其实就是Unity给Android自己处理的一个小信号,根本不是数据通信,还是隔离的
  • 别幻想开个Service使用定时任务,因为在其只有一个UnityActivity实例且处于运行状态时我测试是可以的,一旦发生了跳转,就好像整个App多个进程都被重启,Service即刻失效,当然这个解释可能不对,但是我也不知道发生的什么,sendMsg不知是否支持跨进程通信,但是其本质是一个JNI接口,插件开发是对外开放的。
 //注解1
        using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
        using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) {
                //调用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的参数
                jo.Call("tostMsg", "啊~~~~~~~");//tostMsg为安卓方法名
            }
        }
较为适合解决方案:
  1. Shareprefrence,数据量小使用,UnityActivity和原生都能读取和更改,写过工具类注意过滤高并发就行,遵循原则为Android写,Untity读,Untity默认读默认值做个判断就行,在其Awake实例化时执行获取或者等所有脚本都执行完Start中获取我觉得都没毛病,但是这里有个坑在Unity4的时候,PlayerPrefs会将数据直接进行存储,在Unity5中,数据存储时会先进行一步Url编码,比如key或value值中含有“=”号的,在存储时会被编码为%3D,因此,要做到Unity4的向上兼容,数据的编码解码也要考虑进去,经过实际查看其现在保存文件名为com.biabia.club.v2.playerprefs。
    详解链接:https://www.cnblogs.com/wayland/p/6206724.html
    2.服务器中转适合大量数据存储,
    3.自定义插件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容