Suspending alle Threads dauerte: ms Warnung mit Threads - Android
Ich habe 2Thread
s, die einige Netzwerkberechnungen durchführen. Wenn ich meine App starte und nachdem ich mein zweites @ gestartet haThread
Ich bekomme ein
Suspending all threads took: ms
Warnung gefolgt von:
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
Warnung
Manchmal bekomme ich nur diese 2 Warnungen und manchmal bekomme ich viele dieser 2 Warnungen, bis ich mich entscheide, die laufende App zu beenden. An dieser Stelle wird nur das Haupt-@ ausgeführThread
und im Grunde nichts zu tun. Hier ist der entsprechende Code:
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;
}
...
}
rundsätzlich diethis.getLyricsPlanetDotComResults(MainActivity.searchedLyrics);
Methode in der zweitenThread
erledigt im Allgemeinen einen Großteil der Internetarbeit und -berechnungen. Um genau zu sein, mehr Berechnungen als das Netto-Zeug.
So ich denke, ich habe diese Warnungen, weil die zweiteThread
ist zu "Besetzt"? Oder vielleicht nur meine Implementierung mit dem Aktivitätslebenszyklus mit demonCreate()
Methode undonStart()
Methode sind falsch?
Unnötig zu sagen, ich bekomme nicht die Ausgabe, die ich will, obwohl ich die App debuggt und durch das zweite @ gegangen bThread
und es funktioniertPerfek. Also nochmal, es muss etwas mit meinem @ seActivity
mplementierung von @.