【问题标题】:Launch Android Intent from Libgdx render method从 Libgdx 渲染方法启动 Android Intent
【发布时间】:2013-09-17 15:34:34
【问题描述】:

我正在尝试从 libgdx 中的渲染方法启动 Intent,但出现“无法在未调用 Looper.prepare() 的线程内创建处理程序”错误。

我已经从这里实现了接口http://code.google.com/p/libgdx-users/wiki/IntegratingAndroidNativeUiElements3TierProjectSetup

我使用了 Toast 实现,效果还不错。

这是我的 Android 实现

 @Override
public void launchPlayerRoom() {
    Intent intent = new Intent(appContext, RoomViewActivity.class);
    intent.putExtras(selectPlayerRoom());
    startActivity(intent);
}

并从 Libgdx 渲染调用

if (health_amount <= 0){
            actionResolver.launchPlayerRoom();
        }

Intent 需要从渲染中调用,因为它取决于渲染中递减的值。 我知道问题是从渲染线程调用 UI 线程(我认为!),但我不知道如何解决它。 我已经尝试过这篇帖子Can't create handler inside thread that has not called Looper.prepare()

 @Override
public void launchPlayerRoom() {
    final Intent intent = new Intent(appContext, RoomViewActivity.class);
    intent.putExtras(selectPlayerRoom());
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            startActivity(intent);
        }
    });

但这没什么区别。

任何帮助将不胜感激。

【问题讨论】:

    标签: java android android-intent libgdx


    【解决方案1】:

    Libgdx“渲染”线程不是 Android“UI”线程,因此当您在 Android 后端调用需要 Android UI 线程上下文的代码时,您必须跳过一些环节。

    一般来说,解决方案是在 UI 线程的上下文中创建一个Handler,然后将 Runnables 发布到该对象。这就是集成 android UI 元素的 wiki 页面正在做的事情。

    如果您的Toast 实现工作正常,那么Intent 代码也应该工作(两者具有在Android UI 线程上下文上运行的相同要求)。

    您正在创建的 Handler 可能还有其他问题(它不是在 Libgdx create 回调期间创建的吗?(它与创建它的线程隐式关联。)或者您正在调用此代码设置太早?完整的回溯可能会提供更多详细信息。

    【讨论】:

    • 谢谢,试过'@Override public void launchPlayerRoom() { final Bundle extras = selectPlayerRoom(); uiThread.post(new Runnable() { @Override public void run() { Intent intent = new Intent(appContext, RoomViewActivity.class); intent.putExtras(extras); appContext.startActivity(intent); } }); }' 但仍然没有喜悦。尝试从 create 启动 actionResolver.launchPlayerRoom(),也因同样的错误而崩溃。Toast 使用 render 方法工作,所以我认为界面没问题。
    【解决方案2】:

    我现在已经整理好了。事实证明,我需要中断渲染线程,然后才能启动意图。当我调用 AlertDialog 并从那里启动意图时,我稍微更改了实现。 我接受了这个答案,因为它让我按照正确的思路思考。

    【讨论】:

    • 嗨,@jonnypotwash,您如何在 Render 方法中显示对话框以及如何启动活动,您能否在此处分享您的代码,因为我对从 Render 方法启动活动有相同的要求。
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2016-06-22
    相关资源
    最近更新 更多