【问题标题】:`Can't create handler...Looper.prepare()` in inherited Activity`Can't create handler...Looper.prepare()` 在继承的 Activity 中
【发布时间】:2011-10-07 15:11:46
【问题描述】:

我有一个游戏 Activity(活动 A),它适用于所有代码。然后我为我的新游戏模式创建了一个新的Activity (Activity B),即extends Activity A。但是,当遇到 Toast 行时,Activity B 突然抛出异常(Activity A 可以很好地显示 Toast):

Can't create handler inside thread that has not called Looper.prepare()

Activity B 只覆盖了一个加载级别的方法,没有任何区别!

【问题讨论】:

    标签: java android handler toast looper


    【解决方案1】:

    试试这个:

    Handler innerHandler;
    
    (new Thread(new Runnable() {
    
                @Override
                public void run() {
                    Looper.prepare();
    
                    innerHandler = new Handler() {
                        @Override
                        public void handleMessage(Message message) {
                            Toast.make(...);
                        }
    
                        @Override
                        public void dispatchMessage(Message message) {
                            handleMessage(message);
                        }
                    };
    
                    Message message = innerHandler.obtainMessage();
                    innerHandler.dispatchMessage(message);
                    Looper.loop();
                }
            })).start();
    

    可能有更简单的方法来处理问题。请参考Android – Multithreading in a UI environment 文档。

    【讨论】:

    • 我昨天遇到了同样的问题。我很高兴有帮助(:
    • @OnuraySahin 我知道这个答案是很久以前的,但我发现它很有帮助。但是,我在innerHandler = new Handler() 收到警告,上面写着This Handler class should be static or leaks might occur 但是,将其设为静态意味着我无法访问 Toast 的上下文。你知道解决这个问题的方法吗?
    • @Deena 我认为这是一个 Lint 警告。请尝试在创建 Handler 时传递回调。像这样:innerHandler = new Handler(new Handler.Callback() {...
    • @OnuraySahin 我试过了,但我仍然收到同样的警告。
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2019-08-28
    • 2023-03-18
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多