java - 为什么我的 android.os.Message 内的 Bundle 被重置?

标签 java android mobile

在 Activity 中,我有一些触发消息的代码 fragment :

        Message m = _handler.obtainMessage( UPDATE_PROGRESS );
        Bundle bundle = new Bundle();
        bundle.putInt( BUNDLE_KEY, 50 );
        m.setData( bundle );
        Log.d( LOG_TAG, "value " + bundle.getInt( BUNDLE_KEY, 0 ) ); // prints 50
        Log.d( LOG_TAG, "sent:" + _handler.sendMessage( m ) ); // prints true

在 Activity 的另一部分,我是这样处理的:

    public void handleMessage( final android.os.Message msg ) 
    {
        switch( msg.what )
        {
        case UPDATE_PROGRESS:
            post( new Runnable() 
            {
                @Override
                public void run()
                {
                    Bundle aBundle = msg.getData();
                    Log.d( LOG_TAG, "value in bundle=" + 
                         aBundle.getInt( BUNDLE_KEY, 0 ) ); // prints 0

                    Log.d( LOG_TAG, "contains 'progress' : " + 
                         aBundle.containsKey( BUNDLE_KEY ) ); // prints 'false'

                }
            });
            break;
          }

为什么 Bundle 没有保留在 Message 中?谁正在重置 Bundle 的值?

最佳答案

我知道这是一个旧线程,但由于我在使用 HandlerThread 时遇到了类似的问题,所以我想添加一些有关如何解决它的信息。

我注意到在 HandlerThread 上调用 quit 后,我​​的 Message 实例的内容被偶尔清除。为了解决这个问题,我使用以下方法在handleMessage回调中创建了一个带有新引用的Message对象的副本:Message msgCopy = Message.obtain(msg);

关于java - 为什么我的 android.os.Message 内的 Bundle 被重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1700422/

相关文章:

java - 如何从 Java 中的 ArrayList<Double> 中删除最小值和最大值(只有一个最小值和一个最大值,不是全部)

java - 消费者生产者在java中不起作用

java - 未知的移动目的地 : STORESCP

java - 如何使用改造处理空响应

css - 托管在 GITHUB 上的元素和 css 无法在移动设备上呈现

android - Android 浏览器中列表项后的行

java - 如何以通用方式使函数可序列化

android - 如何使 UI 在横向模式下看起来相同?

android - 如何在android P aosp模拟器上激活汽车数据功能

mysql - 有没有办法从服务器发送短信?