使用Handler+计数器Timer 跨类传递消息时消息收不到,而不用Timer就可以,为什么。

MainActivity.java

public class MainActivity extends Activity {
     @SuppressLint("HandlerLeak")
     static Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.d("HandlerMSG","fromMain:"+msg.what);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Timer timer=new Timer();
        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                Message message=Message.obtain();
                message.what=1;
                handler.sendMessage(message);
                Message message1=Message.obtain();
                message1.what=2;
                MyHandler.handler.sendMessage(message1);
            }
        };
        timer.schedule(timerTask,0,2000);

        Button button=findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,Main2Activity.class));
            }
        });
    }
}

Main2Activity.java

public class Main2Activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Message message=Message.obtain();
                message.what=3;
                MainActivity.handler.sendMessage(message);
                Message message1=Message.obtain();
                message1.what=4;
                MyHandler.handler.sendMessage(message1);
            }
        });
    }
}

MyHandler.java

public class MyHandler {
    @SuppressLint("HandlerLeak")
    static Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.d("!!!@", "FromMyHandler:"+msg.what);
        }
    };
}

在Main1中使用定时器向Main的handler和MyHandler的handler传递一个消息,测试时使用点击事件可以传递,而使用定时器就不可以向MyHandler的handler传递消息了,而在Main2中希望通过点击事件也向两个Handler传递消息,测试发现如果Main中写了定时器向MyHandler发送消息后,Main2也不能向MyHandler发消息,猜测是不是定时器堵塞了Myhandler的类中handler??

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
Handler用作消息处理的好处
1
Handler 如何跨方法 取值? handler 拿到 Message 后赋给全局变量,在其它方法中打印这个全局变量就是空 NULL,求大神指教!!!。
0
ssm如何将在handler里获取到的数据信息传递给所有其他的jsp文件?
1
c++ ACE Proactor 下服务器如何群发消息给所有客户端和单独某一个客户端?
1
在线程中发送message,handler收到msg后再toast,仍然抛异常,请问如何解决?
1
python 创建了一个公用的logging模块,其他模块调用,如何将多个模块的调用打印一个日志文件中
0
VB中SpSharedRecoContext 报自动化错误 实时错误‘-2147467259 (80004005)’
0
求救文件管理器App测试解压缩功能时出错
2
Android 现在还能够通过ITelephony.aidl 挂断电话吗
0
sparkMasterWebUI无法访问
0
Android异步机制中this.finish,无法销毁界面?
1
android为什么点击spinner用静态数据可以监听,而动态加载的不行?
1
renren-fast 框架集成云通讯短信sdk Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;
3
使用Android studio编写的程序,写好代码后运行app到模拟器的时候会闪退
2
QT5 + opencv3.4.6 做的rtsp流读取问题
0
ssm + easyui 数据无法显示
0
在写一个AndroidBLE程序时,遇到了搜索不到设备的原因,怎么解决?
1
写Android BLE程序测试发现无法发现设备,请问怎么解决?
0
关于拦截器登录的问题在拦截器里获取不到session
1
springmvc 拦截器到控制器耗时越来越长