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..剪切粘贴错误..我修复了它