BUG重现环境:

1.应用开启GPU渲染模式 既是在XML中加入参数:<renderMode>direct</renderMode>

一般starling或者其他stage3D环境都必须开启此渲染模式;

2.应用调用第三方插件 例如支付宝插件 银联插件(我使用的是ANE调用)

描述:

在运行应用的时候 调用ANE 调用支付宝或者银联插件付费。付费完成或者付费取消 返回AIR环境的时候 引发;

现象:

手机黑屏  在退出到桌面再进去AIR应用的时候 恢复正常。

图片解释过程:

A。这里调用第三方插件 银联


B。点击确定呼出插件

C.现在直接退出插件。则手机屏幕显示黑屏 BUG引发

目前的解决思路:

A.在调用插件之前 使AIR退出焦点,进入后台运行。ANE中编写一个函数 监控插件是否关闭 关闭后呼出AIR程序界面

B.在调用插件之前 改变渲染模式(显然 这个目前根本没希望实现) 在插件关闭后再改回来

C.把第三方插件集合到ANE里面 让插件成为AIR的一部分(可行 但是要考虑RES ASSETS等布局文件 资源文件的问题 目前大多都是这样做的 但是不同的平台编写的插件调用代码很不规范 )

D.改变渲染模式(显然不可能 因为Stage3D对Direct模式 是硬性要求)

综上 目前我只能在 A 或者C 之间看看是否有解决办法  目前只想到那么多。

目前知道的引发原因:

出现黑屏 是由于  我传入主activity 给银联的时候  银联把我的activity挂到后台了  但是我GPU渲染模式的游戏 不能挂到后台
详细参见:传送门

解决办法:

传入一个新的activity

具体编码:

在ANE入口处:调用函数激活一个ACTIVIEY

public FREObject call(final FREContext context, FREObject[] $args) {
// TODO Auto-generated method stub
FREObject result = null;
_context = context;
Intent intent = new Intent(PayActivity.MYACTIVITY_ACTION);
_context.getActivity().startActivityForResult(intent, 0);
}[/cc]

然后新建的activity:
[cc lang="java"]
package com.qlwx.xmsh.cmge;

import java.util.Timer;
import java.util.TimerTask;

import cn.sdk.SDKManager;
import android.app.Activity;
import android.app.Instrumentation.ActivityResult;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.content.Intent;

public class PayActivity extends Activity implements
OnClickListener {
//声明开启Activity的Action  字符串需要与-app.xml对应
public static final String MYACTIVITY_ACTION = "com.qlwx.xmsh.cmge.PayActivity";
private String TAG = "PayAactivity";
public static String ServerID ;
public static String Name ;
public static String rId ;
public static String Role ;
public static String callBackInfo ;
public static Activity callBackActivity ;
private SDKManager SDKManager;
private LinearLayout layout;
private Button submitReturn;
private Button submitPay;
private static Boolean isExit = false;

private Timer mTimer;
private TimerTask mTimerTask;
private Handler mHandler;
protected static final int UPDATE_TEXT = 0;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case 1:
Log.d(TAG, "---------退出-------");
PayActivity.this.finish();
break;
case 3:
SDKManager.showPaymentView(ServerID, Name, rId,
Role, callBackInfo);
break;
}
}
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
//构建界面

super.onCreate(savedInstanceState);

if(isExit)
{

}
else
{
Log.d(TAG, "---------在这里调用JAR 执行付费-------");
SDKManager = SDKManager.getInstance(this);

layout = new LinearLayout(this);
this.setContentView(layout);
submitReturn = new Button(this);
submitReturn.setText("RETURN");
submitReturn.setId(1);
layout.addView(submitReturn);
this.setContentView(layout);
//添加事件侦听
submitPay = new Button(this);
submitPay.setText("PAY");
submitPay.setId(3);
layout.addView(submitPay);
//添加事件侦听

submitReturn.setOnClickListener(this);
submitPay.setOnClickListener(this);
//			isExit = true;
}

}

}

这样就实现了~

最后记得在APP-XML中加入ACTIVITY声明

<activity android:name=”com.qlwx.xmsh.cmge.ortherActivity”

android:launchMode=”singleTask” android:excludeFromRecents=”true”

android:screenOrientation=”landscape” android:configChanges=”keyboardHidden|orientation”

android:theme=”@android:style/Theme.Light.NoTitleBar.Fullscreen”>

<intent-filter>

<action android:name=”com.qlwx.xmsh.cmge.payActivity” />

<category android:name=”android.intent.category.DEFAULT” />

</intent-filter>

</activity>