栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Handler在子线程中使用——质数计算案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Handler在子线程中使用——质数计算案例

Handler在子线程中使用——质数计算案例

效果图:

代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //该字段表示输入的数字,即上限数值
    public final static String UPPER_NUM = "upper";
    private EditText etNum;
    private CalThread calThread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etNum = findViewById(R.id.et_num);
        //启动计算线程
        calThread = new CalThread();
        calThread.start();
    }

    //定义计算线程类
    class CalThread extends Thread{
        private Handler mHandler;

        @Override
        public void run() {
            //创建Looper对象
            Looper.prepare();
            mHandler = new Handler(){
                @Override
                public void handleMessage(@NonNull Message msg) {
                    if (msg.what == 0x123) {
                        //获取msg中的数据信息
                        int upper = msg.getData().getInt(UPPER_NUM);
                        ArrayList nums = new ArrayList<>();
                        // 计算从2开始、到upper的所有质数
                        outer:
                        for (int i  = 2; i <= upper; i++) {
                            // 用i除以从2开始、到i的平方根的所有数
                            int j = 2;
                            while (j <= Math.sqrt(i)) {
                                // 如果可以整除,则表明这个数不是质数
                                if (i != 2 && i % j == 0) {
                                    continue outer;
                                }
                                j++;
                            }
                            nums.add(i);
                        }
                        // 使用Toast显示统计出来的所有质数
                        Toast.makeText(MainActivity.this, nums.toString(), Toast.LENGTH_LONG).show();
                    }
                }
            };
            //启动Looper
            Looper.loop();
        }
    }

    public void cal(View view) {
        //创建消息
        Message msg = new Message();
        msg.what = 0x123;
        //创建Bundle对象,封装输入的数值
        Bundle bundle = new Bundle();
        bundle.putInt(UPPER_NUM,Integer.parseInt(etNum.getText().toString()));
        msg.setData(bundle);
        //向计算线程中的Handler发送消息
        calThread.mHandler.sendMessage(msg);
    }
}

activity_main.xml



    

    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876935.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号