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:
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 事件代理
- 带有Hilt的Android上的依赖注入
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 事件处理程序
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库