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
相关产品推荐
相关产品推荐

