首页 > 解决方案 > 一个线程只有在我强制它进行调试时才会执行,有什么原因吗?

问题描述

我在尝试将数据发送到数据库时遇到问题。我让主线程为连接打开一个新线程,然后运行一条 sql 语句并将一行插入到后台的数据库中,同时 UI 切换到另一个活动(这是一个相机活动)。问题是当正常运行时,线程似乎没有执行,但是在调试中运行并单步执行 ASyncTask 的每一行时,它会执行。唯一一次更新数据库是在我逐步调试时。该数据库位于 Microsoft SQL Server 上。

我已经尝试过多次,并且只有当我通过调试单步执行时,线程才会始终执行。

在主线程中

SendToDB sendFalsePositive = new SendToDB();
sendFalsePositive.execute();

正在执行的 AsyncTask

Connection conn;

        try {
//          com.microsoft.sqlserver.jdbc.sqlserver.SQLServerDriver
            Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();

            // jdbc and jtds are the drivers that allow the connection to outside databases
            // sq41ddb.na.steelcase.net:3250 is the server and port that are need to connect to the scrapMinder database
            String connString = "jdbc:jtds:sqlserver://SQLSERVER;databaseName=DATABASENAME;user=USERNAME;password=PASSWORD";

            conn = DriverManager.getConnection(connString);

            Log.i("Connection", "Open");
            Log.i("SEND TO DB", "Date: " + date + " Time: " +time);
            Statement statement = conn.createStatement();

            statement.executeUpdate("Insert Into DATABASENAME (Date, Time) \n" +
                    "values ('" + date + "', '" + time +"' );"); //SQL SELECT STATEMENT TO INSERT INTO DATABASE 
            statement.setQueryTimeout(0);


        } catch (Exception e) {
            Log.e("Error SendToDB", e.toString());
        }

有没有办法强制这个线程执行?

标签: javaandroidmultithreadingdebugging

解决方案


我的猜测是,当您切换活动时,它的托管活动被破坏时,AsyncTask 会被破坏。我想你会想要一个服务来完成这个。

这就是问题所在。当活动切换导致 SQL 永远不会执行时,正在删除 AsyncTasks。我添加了一个新活动并在其中调用了函数,现在正在执行 SQL。谢谢你的小费纳什!


推荐阅读