Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在后台android中运行无限循环_Android_Loops_Background - Fatal编程技术网

如何在后台android中运行无限循环

如何在后台android中运行无限循环,android,loops,background,Android,Loops,Background,当我点击一个按钮时,这就是我初始化线程的方式 public void onClick(View view) { new Thread(new sendImage()).start(); } 但当我点击按钮时,图像被发送,但它不允许我做任何其他事情,如果我按下另一个按钮,我的应用程序关闭 如何运行无限循环以允许我的应用程序同时执行其他任务?如果您需要让线程长时间运行,强烈建议您使用java.util.concurrent pacake提供的各种API,例如Executor,ThreadP

当我点击一个按钮时,这就是我初始化线程的方式

public void onClick(View view) {
    new Thread(new sendImage()).start();
}
但当我点击按钮时,图像被发送,但它不允许我做任何其他事情,如果我按下另一个按钮,我的应用程序关闭
如何运行无限循环以允许我的应用程序同时执行其他任务?

如果您需要让线程长时间运行,强烈建议您使用java.util.concurrent pacake提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。

如果有人认为我的解决方案有用,我会发布它 我刚刚实现了一个AsyncTask,它非常有效:

public class SendImage extends AsyncTask<Void,Void,Void>{
    @Override
    protected Void doInBackground(Void... arg0){
        while(true){
              try {
                    Bitmap bmp=screenShot();
                    ByteArrayOutputStream bosBitmap = new ByteArrayOutputStream(); 
                    bmp.compress(CompressFormat.JPEG, 30, bosBitmap); 
                    byte[] arrayBitmap = bosBitmap.toByteArray();   

                    OutputStream os = socket.getOutputStream();
                    BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
                    DataOutputStream dos = new DataOutputStream(bos);
                    dos = new DataOutputStream(os);
                    dos.write(arrayBitmap, 0, arrayBitmap.length);
                    dos.flush();
                    memecontentView.destroyDrawingCache();  
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }       
    }
}
公共类SendImage扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…arg0){
while(true){
试一试{
位图bmp=屏幕截图();
ByteArrayOutputStream bosBitmap=新建ByteArrayOutputStream();
压缩(CompressFormat.JPEG,30,位图);
字节[]arrayBitmap=bosBitmap.toByteArray();
OutputStream os=socket.getOutputStream();
BufferedOutputStream bos=新的BufferedOutputStream(socket.getOutputStream());
DataOutputStream dos=新的DataOutputStream(bos);
dos=新的数据输出流(os);
write(arrayBitmap,0,arrayBitmap.length);
dos.flush();
memecontentView.destroyDrawingCache();
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
}       
}
}

我更改了实现线程的代码,但我的应用程序不允许我执行任何其他操作。如何使无限循环在后台运行,从而允许执行其他任务?我更新了代码。异步任务不适合较长的后台进程。查看Android文档。感谢您提供的信息,您建议我使用哪种其他类型的线程?