屏幕冻结,直到函数返回

时间:2019-02-26 15:35:40

标签: java android freeze

在将文件推送到数据库之前,我需要使用代码来检查是否可以访问Internet。 这是我正在使用的代码。如果我有互联网连接,它就可以正常工作,但如果没有,它会停滞6或7秒钟

     <script type="text/javascript">

            //Width and height
            var w = 500;
            var h = 100;
            var barPadding = 1;

            var rowConverter = function(d) {
    return {

        category: d.category,  
        number: parseFloat(d.number)
    };
}

            var dataset;

            d3.csv("barcharttest.csv", rowConverter).then (function(data) {

                console.log(data);
                dataset=data;
});



             //Create SVG element
            var svg = d3.select("body")
                        .append("svg")
                        .attr("width", w)
                        .attr("height", h);

            svg.selectAll("rect")
               .data(dataset)
               .enter()
               .append("rect")
               .attr("x", function(d, i) {
                    return i * (w / dataset.number.length);
               }) 
               .attr("y", function(d) {
                    return h - (d.number * 4);
               })
               .attr("width", w / dataset.length - barPadding)
               .attr("height", function(d) {
                    return d.number * 4;
               })
               .attr("fill", "teal");

        </script>
    </body>
</html>

我希望它将文件(逐个文件)推送到数据库,并且我想每次都检查Internet是否正常工作

2 个答案:

答案 0 :(得分:2)

要检查用户是否已连接到Internet,请使用此功能。

public boolean hasInternetConnection() {
  ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  return manager.getActiveNetworkInfo() != null && manager.getActiveNetworkInfo().isConnected();
}

您的屏幕冻结,因为您在主线程上执行了长时间运行的任务(上传文件),这可能导致您的应用无法响应。您必须通过使用AsyncTask,RxJava或Coroutines(Kotlin)将操作移出主线程。 See this

答案 1 :(得分:-1)

 Handler hander = new Handler(this);
 handler.postDelayed(new Runnable() {
        @Override
        public void run() {
        //do what you want
  },2000L);