Java Android处理程序和线程
我试图理解处理程序、线程、未来、可调用等是如何工作的 所以我写了这段代码来模拟最常见的任务类型:Java Android处理程序和线程,java,android,multithreading,handler,Java,Android,Multithreading,Handler,我试图理解处理程序、线程、未来、可调用等是如何工作的 所以我写了这段代码来模拟最常见的任务类型: HandlerThread t1 = new HandlerThread("Thread di update"); private ServiceHandler updateHandler; private static ExecutorService elaborateAll = Executors.newSingleThreadExecutor(); privat
HandlerThread t1 = new HandlerThread("Thread di update");
private ServiceHandler updateHandler;
private static ExecutorService elaborateAll = Executors.newSingleThreadExecutor();
private static Queue<Float> queue = new LinkedList<Float>();
// ..................................... onCreate() and other code...
@Override
protected void onStart() {
super.onStart();
t1.start();
updateHandler = new MyHandler(t1.getLooper());
}
private final static class MyHandler extends Handler {
MyHandler(Looper loop) {
super(loop);
}
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_UPDATE_POS:
// EXECUTOR WITH CALLABLE AND FUTURE ===============================================
CalculateSeparately calcola = new CalculateSeparately(msg.arg1);
Future<Float> fuValore = elaborateAll.submit(calcola);
float valore = fuValore.get();
break;
case MSG_DUE:
// RUNNABLE AND THREAD ============================================================
Runnable snd = new MioRunnnable(dato);
Thread tSnd = new Thread(snd);
tSnd.start();
break;
case MSG_TRE:
// ASYNCTASK ====================================================================
new MyAsyncTask().execute();
break;
case MSG_QUATTRO:
// ASYNCTASK WITH GET ============================================================
try {
float mioValore = new ChiudiTraccia().execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
break;
default:
super.handleMessage(msg);
}
}
public static class CalculateSeparately implements Callable<Float> {
int val;
public CalculateAvgSpeed(int media) {
this.val = media;
}
@Override
public Float call() throws Exception {
if(queue.size() == 20)
queue.poll();
queue.offer(this.val);
float spd = calcolaMediaValCoda(coda);
return spd;
}
}
handlerThreadT1=新的HandlerThread(“线程di更新”);
私有ServiceHandler updateHandler;
private static ExecutorService deployeall=Executors.newSingleThreadExecutor();
private static Queue=new LinkedList();
// ..................................... onCreate()和其他代码。。。
@凌驾
受保护的void onStart(){
super.onStart();
t1.start();
updateHandler=newMyHandler(t1.getLooper());
}
私有的最终静态类MyHandler扩展了Handler{
MyHandler(活套循环){
超级(环路);
}
@凌驾
公共无效handleMessage(消息消息消息){
开关(msg.what){
案例消息更新位置:
//具有可赎回权和未来权的执行人===============================================
CalculatesParately calcola=新的CalculatesParately(msg.arg1);
Future fuValore=详细说明提交(calcola);
float valore=fuValore.get();
打破
案件日期:
//可运行和线程============================================================
可运行snd=新的可运行表格(dato);
螺纹tSnd=新螺纹(snd);
tSnd.start();
打破
案例信息:
//异步任务====================================================================
新建MyAsyncTask().execute();
打破
案例MSG_QUATTRO:
//使用GET异步任务============================================================
试一试{
float mioValore=new chiuditracia().execute().get();
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
打破
违约:
超级handleMessage(msg);
}
}
公共静态类CalculateSeparate实现可调用{
int-val;
公共计算速度(int媒体){
this.val=媒体;
}
@凌驾
公共浮点调用()引发异常{
if(queue.size()==20)
queue.poll();
queue.offer(this.val);
浮动速度=calcolaMediaValCoda(coda);
返回spd;
}
}
我已经测试过它发送消息给它,一切正常
那么,我的代码是正确的(代码、Java最佳实践等)?还是只是巧合
提前谢谢你我认为这段代码甚至无法编译,你在类“MyHandler”中使用构造函数“ServiceHandler”更适合ops..剪切粘贴错误..我修复了它