После перерыва я пытаюсь завершить свое первое приложение для Android и в процессе его преобразования в Kotlin. Все прошло хорошо, но я получаю предупреждение об асинхронных задачах, которые делают вызовы в локально хранимую базу данных SQL, и ошибка заключается в том, что асинхронный вызов должен быть статическим, иначе произойдет утечка.
Так что я намерен все сделать правильно, и из того, что я прочитал, мне нужно использовать Globalscope.launch.
Вот код, который я использовал для доступа к базе данных в другом потоке.
private class MyAsyncTask extends AsyncTask<String, String, String>
{
@Override protected String doInBackground (String... params)
{
//SQL tasks, open read and close database
}
@Override protected void onPostExecute(String result)
{
// Tasks on retrieved database.
}
@Override protected void onPreExecute()
{ }
@Override protected void onProgressUpdate(String... text) {}
}
Я сделал преобразование Kotlin, и он произвел этот код, который я получаю, должен быть статическим или вызовет предупреждение об утечке памяти:
private inner class MyAsyncTask : AsyncTask<String, String, String>() {
override fun doInBackground(vararg params: String): String?
{
//SQL tasks, open read and close database
}
override fun onPostExecute(result: String)
{
// Tasks on retrieved database.
}
override fun onPreExecute() {}
override fun onProgressUpdate(vararg text: String)
{}
}
Вот как я считаю, что теперь я должен выполнить вызов SQL для отдельного потока в Kotlin
private inner class MyAsyncTask()
{
GlobalScope.launch {
//SQL tasks, open read and close database
}
Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive
// Tasks on retrieved database.
}
Является ли GlobalScope.launch лучшим и самым безопасным способом вызова локальной базы данных SQL, и если нет, то какой метод правильный?