You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android定时创建AsyncTask子类实例执行仅首次触发doInBackground问题

问题描述

业务逻辑为每隔1秒截取一次相机预览画面,每次间隔触发时创建一个AsyncTask子类的新实例,直接调用execute方法执行且不将实例存入变量。但在该类的doInBackground()方法中添加Log.d日志后发现,仅间隔触发的第一秒会打印该日志,后续触发时doInBackground()不会执行,最终需要实现每秒向socket服务器发送新截图的需求。

相关代码

定时间隔执行代码

private void startTakingPicturesInterval() {
    new Timer().scheduleAtFixedRate(new TimerTask(){
        @Override
        public void run(){
            camera.takePicture(null, null, pictureScreenTaked);
            Log.d("debug_app", "Picture Taked");
            new ClientServerStream().execute(image_to_send_captured_each_time);
        }
    },0,1000);
}

private Camera.PictureCallback pictureScreenTaked = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        image_to_send_captured_each_time = BitmapFactory.decodeByteArray(data, 0, data.length);

        ImageView img_result_test = findViewById(R.id.img_result_test);
        img_result_test.setImageBitmap(image_to_send_captured_each_time);
        camera.cancelAutoFocus();
        camera.startPreview();
    }
};

AsyncTask子类doInBackground实现代码

@Override
protected Object doInBackground(Object[] objects) {
    initValues();
    Log.d("debug_app", "Client executed correctly");
    try {
        bw.write("test");
        bw.flush();

        closeAll();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
问题原因

经过排查,问题根源是服务端socket断开,客户端socket执行时抛出异常,而由于任务为异步执行,错误日志没有正常打印,导致看起来后续任务没有执行。


内容的提问来源于stack exchange,提问作者mehdibe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:09:01