我遇到一个带有管理器线程的应用程序来执行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。
答案 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