android 主线程与分线程 做同步

本文通过实例演示了 Android 中 Handler 的使用方式,包括主线程与子线程间的通信过程。展示了如何创建 Handler 对象,如何在子线程中发送消息到主线程,并处理这些消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码

package com.example.handlerthreaddemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {
    Test t;
    Handler mh=new Handler(){

        @Override
        public void handleMessage(Message msg) {
            String s = (String) msg.obj;
            Bundle data = msg.getData();
            String title = data.getString("title");
            String info = data.getString("info");
            System.out.println("title is " + title + ", info is"
                    + info);
            System.out.println("msg.obj is " + s);
            System.out.println("handlerMessage() is "+Thread.currentThread().getId());
        }
        
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t=new Test(mh);
        
    }
    public void OnClick(View v){
        switch (v.getId()) {
        case R.id.button1:
            t.send();
            break;

        default:
            break;
        }
        
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


分线程代码:

package com.example.handlerthreaddemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;

public class Test {
    HandlerThread mhandlerThread1, mhandlerThread2;
    Handler mhandler1;
    Handler mhandler2;

    public Test(Handler mh) {
        mhandler2=mh;
        mhandlerThread1 = new HandlerThread("update");
        mhandlerThread1.setDaemon(true);
        mhandlerThread1.start();
        mhandler1 = new Handler(mhandlerThread1.getLooper()) {

            @Override
            public void handleMessage(Message msg) {
                String s = (String) msg.obj;
                Bundle data = msg.getData();
                String title = data.getString("title");
                String info = data.getString("info");
                System.out.println("title is " + title + ", info is"
                        + info);
                System.out.println("msg.obj is " + s);
                System.out.println("handlerMessage() is "+Thread.currentThread().getId());
                
                //----------------------------
                Message msg1 = new Message();

                msg1.obj = "abc";

                Bundle data1 = new Bundle();

                data1.putString("title", "你好吗");

                data1.putString("info", "哈哈哈哈");

                msg1.setData(data1);
                mhandler2.sendMessage(msg1);
            }
        };
    }

    public void send() {
        System.out.println("send() is "+Thread.currentThread().getId());
        Message msg = new Message();

        msg.obj = "abc";

        Bundle data = new Bundle();

        data.putString("title", "你好吗");

        data.putString("info", "哈哈哈哈");

        msg.setData(data);
        mhandler1.sendMessage(msg);
        
        // 将msg发送到对象,所谓的目标对象就是生成该msg对象的Handler对象

    }
}

xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/textView1"
        android:layout_marginRight="16dp"
        android:layout_marginTop="44dp"
        android:text="Button"
        android:onClick="OnClick" />

</RelativeLayout>

csdn下载路径:http://download.youkuaiyun.com/detail/wenwei19861106/4849987

CH341A编器是一款广泛应用的通用编设备,尤其在电子工嵌入式系统开发领域中,它被用来烧录各种类型的微控制器、存储器其他IC芯片。这款编器的最新版本为1.3,它的一个显著特点是增加了对25Q256等32M芯片的支持。 25Q256是一种串行EEPROM(电可擦可编只读存储器)芯片,通常用于存储序代码、配置数据或其他非易失性信息。32M在这里指的是存储容量,即该芯片可以存储32兆位(Mbit)的数据,换算成字节数就是4MB。这种大容量的存储器在许多嵌入式系统中都有应用,例如汽车电子、工业控制、消费电子设备等。 CH341A编器的1.3版更新,意味着它可以更多的芯片型号兼容,特别是针对32M容量的芯片进行了优化,提高了编效率稳定性。26系列芯片通常指的是Microchip公司的25系列SPI(串行外围接口)EEPROM产品线,这些芯片广泛应用于各种需要小体积、低功耗非易失性存储的应用场景。 全功能版的CH341A编器不仅支持25Q256,还支持其他大容量芯片,这意味着它具有广泛的兼容性,能够满足不同项目的需求。这包括但不限于微控制器、EPROM、EEPROM、闪存、逻辑门电路等多种类型芯片的编。 使用CH341A编器进行编操作时,首先需要将设备通过USB连接到计算机,然后安装相应的驱动软件。在本例中,压缩包中的"CH341A_1.30"很可能是编软件的安装序。安装后,用户可以通过软件界面选择需要编的芯片类型,加载待烧录的固件或数据,然后执行编操作。编中需要注意的是,确保正确设置芯片的电压、时钟频率等参数,以防止损坏芯片。 CH341A编器1.3版是面向电子爱好者专业工师的一款实用工具,其强大的兼容性易用性使其在众多编器中脱颖而出。对于需要处理25Q256等32M芯片的项目,或者26系列芯片的编工作,CH341A编器是理想的选择。通过持续的软件更新升级,它保持了现代电子技术同步,确保用户能方便地对各种芯片进行编调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值