unity調(diào)用安卓原生activity,按Home鍵返回被殺死問題解決

? ? ? ?做過unity與安卓原生交互的同學(xué)應(yīng)該都知道,我們在unity里面調(diào)用安卓原生的activity,按Home鍵返回到桌面,之后重新進入unity場景,安卓原生的activity就會被殺掉。

? ? ? ? 其實這個問題做過安卓的人都知道,這個關(guān)乎到安卓對于activity的運行機制問題,這些問題這里不想再多說了,網(wǎng)上有太多關(guān)于launchMode的解答例如:

http://blog.csdn.net/liuhe688/article/details/6754323/

如果對activity 的四種launchMode:1.standard、2.singleTop、3.singleTask、4.singleInstance不了解 可以先去查查資料。

因為unity默認(rèn)程序打包出來的Androidmanifest配置android:launchMode="singleTask",一看到這里,做安卓開發(fā)的同學(xué)基本就知道了,哦原來是這里搞的鬼,所以只要將launchMode="singleTask"改成標(biāo)準(zhǔn)的launchMode="singleInstance"就可以了,因為默認(rèn)就是標(biāo)準(zhǔn)的所以可以直接把這一行直接去掉。

? ? ? ? 但是你以為這樣就可以了么,眾所周知,安卓的手機何其之多,所以就會出現(xiàn)各種的定制系統(tǒng),出現(xiàn)各種奇奇怪怪的問題也是再所難免,對于程序員來說,有bug實在是太正常不過了,我們最不怕的就是bug,只要給出相應(yīng)的機子,重現(xiàn)出相應(yīng)的bug,對我們來說就不是bug 了,而是一個丟在臭水溝的西瓜皮,爛掉只是時間的問題而已。

? ? ? ? 好了說重點,就是在將launchMode改成標(biāo)準(zhǔn)的之后在很多手機會出現(xiàn)這樣一種情況安裝完應(yīng)用之后直接點擊打開按鈕進入游戲之后按HOME鍵退到桌面,再次點擊應(yīng)用圖標(biāo)進入游戲就會出現(xiàn)重新開始應(yīng)用(其實這里是是因為重新創(chuàng)建主activity,才會看到重啟游戲),在某些安卓發(fā)布平臺就會因為這個問題而導(dǎo)致審核不通過,然后發(fā)給你的日志報錯信息只能看到:

```
07-21 14:17:15.714 632-632/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

07-21 14:17:15.714 632-632/? A/DEBUG: Build fingerprint: 'Xiaomi/land/land:6.0.1/MMB29M/V8.2.3.0.MALCNDL:user/release-keys'

07-21 14:17:15.714 632-632/? A/DEBUG: Revision: '0'

07-21 14:17:15.714 632-632/? A/DEBUG: ABI: 'arm'

07-21 14:17:15.714 632-632/? A/DEBUG: pid: 25450, tid: 25721, name: UnityMain? >>> com.sinyee.babybus.shadow <<<

07-21 14:17:15.714 632-632/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xdc

07-21 14:17:15.726 632-632/? W/debuggerd: type=1400 audit(0.0:1386133): avc: denied { search } for name="com.sinyee.babybus.shadow" dev="dm-1" ino=138908 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0

07-21 14:17:15.768 632-632/? A/DEBUG:? ? r0 00000000? r1 00000001? r2 df7d1a30? r3 00000000

07-21 14:17:15.769 632-632/? A/DEBUG:? ? r4 e140bc20? r5 df7d13e4? r6 df7d13e8? r7 df7d1510

07-21 14:17:15.769 632-632/? A/DEBUG:? ? r8 efc2a101? r9 df7d1510? sl 00000001? fp df7d138c

07-21 14:17:15.769 632-632/? A/DEBUG:? ? ip df7d1a90? sp df7d1218? lr e12ff97c? pc e109b154? cpsr a00f0010

07-21 14:17:15.773 632-632/? A/DEBUG: backtrace:

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #00 pc 00021154? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libmono.so

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #01 pc 001f2738? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libmono.so (mono_runtime_invoke+136)

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #02 pc 003e93a0? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #03 pc 0034e548? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #04 pc 000f78e8? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.773 632-632/? A/DEBUG:? ? #05 pc 00387998? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.774 632-632/? A/DEBUG:? ? #06 pc 0038d1e0? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.774 632-632/? A/DEBUG:? ? #07 pc 004e2c58? /data/app/com.sinyee.babybus.shadow-1/lib/arm/libunity.so

07-21 14:17:15.774 632-632/? A/DEBUG:? ? #08 pc 01167eeb? /data/app/com.sinyee.babybus.shadow-1/oat/arm/base.odex (offset 0xa1e000)
```

乍一看,啊,是unity原生層報錯,這他媽怎么搞,難道去反編譯unity的.so來看,不僅麻煩還不一定看的懂。

我的解決方法:

將unity項目打成eclipse工程,就是打包的時候?qū)oogle Android project勾起來如圖001,

圖 001

然后,將工程用eclipse或者Android studio打開,我們這邊已經(jīng)有用Android studio寫好模板 只要把資源復(fù)制過來就可以了。然后我這邊在app下創(chuàng)建一個UnityMain.java來作為啟動activity。只要在這里面做下判斷如果游戲activity存在就不再重新啟動了,腳本如下:

```
public class UnityMain extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

? ? super.onCreate(savedInstanceState);

? ? ?if (App.get().mainActivity != null) { //這里是判斷應(yīng)用的activity是否存在,存在的話直接結(jié)束這里,否則啟動應(yīng)用

? ? finish();

? ?} else {

? ?Intent intent = new Intent(this, Main.class); //這里的Mian就是啟動unity的類

? ?startActivity(intent);

? ?finish();

? ? }

? }

}
```

好了,這就是我的解決辦法,如果有更好的方法也可以分享出來。

本文固定鏈接:unity調(diào)用安卓原生activity,按Home鍵返回被殺死問題解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容