【问题标题】:How to stop In-App Billing client from losing EGL Context?如何阻止应用内计费客户端丢失 EGL 上下文?
【发布时间】:2012-04-02 21:13:56
【问题描述】:

我有一个包含两个活动的 Android 项目。一个是我的主要活动,使用从本机代码更新的GLSurfaceView。另一个是PurchaseActivity,它打开 Google 的应用内结算客户端进行购买。进行购买工作正常。

我遇到的问题是,在PurchaseActivity 完成后,无论是成功完成、出错还是被取消,然后切换回主活动,EGL 上下文都会消失,我会收到:

在没有当前上下文的情况下调用 OpenGL ES API(每个线程记录一次)

之后onSurfaceCreated()onSurfaceChanged() 方法被重新触发。

我发现 this question 类似,但我的已经在单独的活动中运行,如果我删除 finish() 调用,它仍然停留在 PurchaseActivity 中。

在进行应用内计费调用后,我真的需要重新加载纹理吗?由于该应用并未暂停,因此目前似乎没有必要这样做。

我的渲染器代码非常基本,但无论出于何种原因,在计费客户端窗口关闭后,它都会触发一个新界面并炸毁我的本机代码:

public class GameRenderer implements GLSurfaceView.Renderer
{   
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    { }

    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
        BaseLib.setScreenSize(width, height);
        BaseLib.init();
    }

    public void onDrawFrame(GL10 gl)
    {
        BaseLib.render();
    }
}

【问题讨论】:

    标签: android opengl-es android-ndk in-app-billing


    【解决方案1】:

    你看过这个帖子吗?

    Prevent onPause from trashing OpenGL Context

    我猜你在切换活动时会得到一个 onPause,它告诉 GLSurfaceView 释放资源。

    在 API 11+ 上,有一个命令 setPreserveEGLContextOnPause,但如果您想针对更低的 API 级别,则不确定这是否适合您。

    【讨论】:

    • 原来他们是我的代码中的一个竞争条件,这是我问题的根源,但这也很有帮助。
    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 2015-09-10
    • 2015-06-10
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2019-02-20
    • 2012-07-29
    相关资源
    最近更新 更多