java - 从 Libgdx 渲染方法启动 Android Intent

标签 java android android-intent libgdx

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

我已经从这里实现了接口(interface)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);
        }
    });

但这没有什么区别。

任何帮助将不胜感激。

最佳答案

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

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

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

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

关于java - 从 Libgdx 渲染方法启动 Android Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854050/

相关文章:

android - 如何在 Android 的 TabLayout 中使选项卡标题向左对齐

java - Android代码转纯java

android - 我传递的包裹是空的?

java - 将 JDBC 获取的 Date 数据作为 XML 转换为 Date 对象

java - Java 中的 boolean 信号量

android - 在自定义 View 的状态更改时更改颜色

android - 从 ListView 中获取所有勾选的项目

Android - ListView 中的 Intent

java - 计时器导致 Tomcat 服务器出现问题

java - AES ECB 模式需要填充,那我们怎么会有这个 AES/ECB/NOPADDING 呢?