Android|Android 事件处理之使用新线程计算质数

该示例允许用户输入一个数字,从而计算该数字范围内的质数,每一步的代码都要详细标注,直接上源码。
1.MainActivity:

package com.example.newhandler; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.view.View; import android.widget.EditText; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { static final String UPPER_NUM = "upper"; EditText input; CalThead calThead; //定义一个线程类 class CalThead extends Thread{ public Handler mHandler; public void run(){ //创建Looper对象,同时创建MessageQueue Looper.prepare(); mHandler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what == 0x123){ List nums = new ArrayList<>(); //从UI线程(EditText)中或者数值 int upper = msg.getData().getInt(UPPER_NUM); //从2开始,到upper的所有质数 //outer就是一个标签,java语言中根本没有此关键字,因此outer也可以用其它的词来代替 // 当程序从外层循环进入内层循环后,当(i != 2 && i % j ==0)时,程序遇到一个continue outer; 语句, // 这行代码将会导致继续outer标签指定的外层循环,而不是继续continue所在的循环 outer: for (int i = 2 ; i <= upper ; i++){ //用i除以2开始,到i的平方根的所有数 for (int j = 2 ; j <= Math.sqrt(i) ; j++){ //如果可以整除,则表明这个数不是质数 if (i != 2 && i % j ==0){ continue outer; } } nums.add(i); } Toast.makeText(MainActivity.this,nums.toString(),Toast.LENGTH_SHORT).show(); } } }; //启动Looper Looper.loop(); } }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); input = findViewById(R.id.input); calThead = new CalThead(); //启动线程 calThead.start(); } public void cal(View view){ Message msg = new Message(); msg.what = 0x123; Bundle bundle = new Bundle(); bundle.putInt(UPPER_NUM , Integer.parseInt(input.getText().toString())); msg.setData(bundle); calThead.mHandler.sendMessage(msg); } }

【Android|Android 事件处理之使用新线程计算质数】2.XML:

    推荐阅读