java - 如何在不减慢应用程序的情况下启动服务?

标签 java android performance service

在我的 Android 应用程序中,我运行的服务会大大降低我的应用程序的速度。我不知道是否有我选择的最佳方法。我认为这是因为我使用 sleep() 函数每隔 x 秒检查一次网站上是否有任何变化,但我对此完全不确定。这是代码:

    package com.example.goo;

//import

    public class ServiceLive extends Service{

        ThreadDemo td = new ThreadDemo();

        String[] tabAllTeams;
        String[] tabAllScores;
        String code;
        Document doc;

        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void onCreate() {
            super.onCreate();



            System.out.println("Lancement de mon service");
            td.run();
        }

        public String[] getAllTeams(){
            return tabAllTeams;
        }

        public String[] getAllScores(){
            return tabAllScores;
        }

        private class ThreadDemo extends Thread{
            @Override
            public void run() {
                super.run();
                try{

                    ThreadDemo.sleep(3000*10);
                    System.out.println("check again");
                    new NetworkOperation().execute();
                }catch(Exception e){
                    e.getMessage();
                }
                new NetworkOperation().execute();
            }
        }

        //Get All Data
        class NetworkOperation extends AsyncTask<Void, Void, String > {
            protected String doInBackground(Void... params) {
                try {
                    //Définir Site De Récupération
                    doc = Jsoup.connect("http://www.siteduzero.com").get();
                    //Définir Classe de Récupération
                    Elements getId = doc.getElementsByClass("page-visitors");   
                    code = getId.text();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                td.run();
                return null;
            }
        }
    }

减慢应用程序的部分是什么?谢谢

解决方案:

在这里查看 Maurice Gavin 的答案:How to start service in new thread in android

最佳答案

您正在服务的主线程上运行 Thread。 服务的主线程与 Activity 中的 UI 线程是同一个线程。

因此 Sleep 调用正在您的 UI 线程上运行......

请使用 .start() 而不是 .run() 启动 Thread

使用 .run() 您将在 Thread 内部启动 runnable,而不是线程本身...

   @Override
    public void onCreate() {
        super.onCreate();

        System.out.println("Lancement de mon service");
        td.start();
    }
private class ThreadDemo extends Thread{
    @Override
    public void run() {
        super.run();
        try{

            ThreadDemo.sleep(3000*10);
            System.out.println("check again");
            doInternetStuff();
        }catch(Exception e){
            e.getMessage();
        }
        doInternetStuff();
    }
}

private void doInternetStuff() {
    try {
        //Définir Site De Récupération
        doc = Jsoup.connect("http://www.siteduzero.com").get();
        //Définir Classe de Récupération
        Elements getId = doc.getElementsByClass("page-visitors");   
        code = getId.text();
    } catch (Exception e) {
        e.printStackTrace();
    }
    new ThreadDemo().start();
}

关于java - 如何在不减慢应用程序的情况下启动服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694678/

相关文章:

java - 如何将 CSS 用于 Vaadin 组件?

java - hibernate 注释 : No default constructor for entity

java - 正确断开客户端(telnet)与 ServerSocket 的连接

java - 我知道 java.net.URL 试图解析 URL; java.net.URI 做同样的事情吗?

java - 使用 ListView 中的删除按钮删除行

java - 解压文件真的很慢

sql - Oracle 分区修剪与绑定(bind)变量

android - 尝试使用 -pg [Termux] 时出现 "Undefined reference to ` mcount '"

android - 为什么 overScrollBy() 和 onOverScrolled() 不能与 RecyclerView 一起使用

performance - float vs 定点数 : speed on Intel I5 CPU