La suspension de tous les threads ont pris: ms avertissement l'utilisation de Threads - Android

J'ai 2 Threads qui font qu'une partie du réseau de calcul.
Quand je lance mon appli et après le démarrage de mon deuxième Thread - je obtenir un:

Suspending all threads took: ms
avertissement suivi par:

Background sticky concurrent mark sweep GC freed 246745(21MB) AllocSpace objects, 169(6MB) LOS objects, 33% free, 31MB/47MB, paused 1.972ms total 127.267ms avertissement.

Parfois, j'ai juste ces 2 mises en garde et d'autres fois, je reçois beaucoup de ces 2 mises en garde jusqu'à ce que je décide de mettre fin à l'application en cours d'exécution. À ce stade, c'est juste la course de la principale Thread et, fondamentalement, ne rien faire. Voici le code correspondant:

MainActivity.java:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Getting html page through a thread
    this.getHtmlPageThread = new GetHtmlPageThread(URL_STRING);
    this.getHtmlPageThread.start();

    //The thread that will search the web for data
    this.getDataFromTheWebThread = new GetDataFromTheWebThread();

    //Search button click listener
    searchButton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //Get the searched lyrics
            searchedLyrics = inputEditText.getText().toString();

            informUserAboutConnectionToTheNet();

            //Starting to search the web for data through a thread
            getDataFromTheWebThread.start();

            if (!getDataFromTheWebThread.isAlive())
            {
                printMap(MainActivity.matchResultMap);
            }
        }
    }); //End of search button click listener

    printMap(MainActivity.matchResultMap);

} //End of onCreate() method

protected void onStart()
{
    super.onStart();

    if (!this.isParseSucceeded()) //Connection to net failed
    {
        if (!getHtmlPageThread.isAlive()) //If the thread is not alive, start it.
        {
            getHtmlPageThread.start(); //Try to connect again
            this.informUserAboutConnectionToTheNet();
        }
    }
    if (!this.isParseSucceeded())
    {
        super.onStart(); //Call onStart() method
    }

} //End of onStart() method

GetHtmlPageThread.java:

public class GetHtmlPageThread extends Thread
{
    private String url;

    public GetHtmlPageThread(String url)
    {
        this.url = url;
    }

    @Override
    public void run()
    {
        try
        {
            MainActivity.htmlPage.setHtmlDocument(this.getParsedDocument(this.url));
            if (MainActivity.htmlPage.getHtmlDocument() != null)
            {
                MainActivity.parsedSucceeded = true; //Parsed succeeded
            }
            else
            {
                MainActivity.parsedSucceeded = false; //Parsed failed
            }
            Thread.sleep(100);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * Returns the document object of the url parameter.
     * If the connection is failed , return null.
     *
     * @param url Url to parse
     * @return The document of the url.
     *
     */
    public Document getParsedDocument(String url)
    {
        try
        {
            return Jsoup.connect(url).get();
        }
        catch (IOException e) //On error
        {
            e.printStackTrace();
        }

        return null; //Failed to connect to the url
    }

}

GetDataFromTheWeb.java:

public class GetDataFromTheWebThread extends Thread
{
    public static boolean isFinished = false; //False - the thread is still running. True - the thread is dead

    @Override
    public void run()
    {
        GetDataFromTheWebThread.isFinished = false;
        try
        {
            this.getLyricsPlanetDotComResults(MainActivity.searchedLyrics); //Method for internet computations
            Thread.sleep(100);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        GetDataFromTheWebThread.isFinished = true;
    }
    ...
}

Fondamentalement la this.getLyricsPlanetDotComResults(MainActivity.searchedLyrics); méthode dans la deuxième Thread est de faire beaucoup de travail sur l'internet et les calculs en général. Plus de calculs que le net des trucs pour être exact.

Donc je suppose que j'ai reçu ces avertissements, car la deuxième Thread est trop "Occupé"? Ou peut-être juste ma mise en œuvre avec l'activité du cycle de vie avec le onCreate() méthode et onStart() méthode sont mauvais?

Inutile de dire que je ne suis pas d'obtenir le résultat que je veux, si je déboguer l'application et traversai le deuxième Thread et il fonctionne Parfaitement. Encore une fois, ce doit être quelque chose avec mon Activitymise en œuvre.

OriginalL'auteur God | 2016-04-15