Android:我的线程无限地离开了移动设备的黑屏

时间:2016-05-13 12:48:42

标签: android multithreading

我遇到一个带有管理器线程的应用程序来执行catch数据并将它们存储在内存中以供使用的问题,但事实证明,当线程被释放时(创建主要活动时)黑屏仍然无限无能为力没有。数据库很好,因为没有线程的使用是完美的。

我的Thead:

public class HiloBD extends Activity implements Runnable{

    ManejoBD baseDatos;
    MainActivity main;
    boolean salir=false;

    HiloBD(MainActivity main){
        this.main=main;
        baseDatos=new ManejoBD(main);
    }

    public void run(){

        main.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                while (!salir) {
                    Toast.makeText(main, "Vamos a guardar la BD", Toast.LENGTH_SHORT).show();
                    baseDatos.volcarBDArrays();
                    try {
                        Thread.sleep(600000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    baseDatos.guardarDatosCursos();
                    baseDatos.guardarDatosAlumnos();
                    Toast.makeText(main, "BASE DE DATOS ACTUALIZADA", Toast.LENGTH_SHORT).show();
                }

            }
        });

    }
    public void setSalir(boolean sal){
        salir = sal;
    }

我这样调用线程(在Main中):

HiloBD hilo=new HiloBD(this);
    Thread hiloEjecutar=new Thread(hilo);
    hiloEjecutar.start();

THX。

1 个答案:

答案 0 :(得分:0)

处理程序从导致黑屏的主线程创建线程,因此任何需要花费大量时间的任务都应与ScheduledExecutorService一起使用
像这样创建它的对象。

private final ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(1);

并像这样使用它。

scheduler.schedule(runnable, 0, TimeUnit.SECONDS);

runnable是Runnable,0是延迟,TimeUnit是延迟的单位


这是Android文档 https://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService