Browsed by
月份:2015年12月

在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方案

在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方案

一个Activity在manifet里声明了android:parentActivityName;这时候通过Activity左上角的返回按钮点击返回,

启动声明的父Activity,总会先调用父Activity的OnDestroy方法,具体如下面所说:

    <activity
        android:name="com.example.helloworld.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.helloworld.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.helloworld.MainActivity" />
    </activity>
DisplayMessageActivity为子Activity,而MainActivity为父Activity,点击
DisplayMessageActivity的左上角返回按钮的时候,调用逻辑如下:
MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()
解决方案是:
为设置MainActivity属性android:launchMode=singleTop

顺便脑补android:parentActivityName的作用,就是为了左上角给子Activity加一个返回按钮,具体信息如下:
Android 4.1提高性能、增强用户体验
  App 栈导航:通过设置android:parentActivityName改变回退栈的内容,如果栈中没有parentActivity,则合成栈,通过onPrepareNavigateUpTaskStack()改变parentActivity中的内容。
使用多个iOS ANE的duplicate symbol问题

使用多个iOS ANE的duplicate symbol问题

当使用AIR进行iOS应用开发时,如果用到了多个iOS ANE,有时在打包时会遇到duplicate symbol问题,比如:

ld: duplicate symbol _ContextInitializer .....

这个问题的原因是由于多个ANE的iOS原生代码中有同名的类或全局变量。解决方法便是统一给它们加上一个前缀,比如公司和产品的名字组合。

如果使用ANE模板项目创建的ANE,会有 ContextInitializer等同名方法,注意修改

 

其他关于开发ANE需要注意的问题可以参见这篇文章:

原文:20 tips for creating Air Native Extensions for iOS

中文翻译:20条开发AIR Native Extension的建议