asynctask makes your code crawl

storage_ts_index
Georg Lukas 2011-04-09 00:27:07 +02:00
rodzic befb2847ea
commit fae714f854
5 zmienionych plików z 75 dodań i 23 usunięć

Wyświetl plik

@ -8,6 +8,11 @@
-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
-keepclassmembers class * extends android.os.AsyncTask {
protected void onPreExecute();
public *** doInBackground(...);
protected void onPostExecute(...);
}
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);

Wyświetl plik

@ -5,7 +5,7 @@ import _root_.android.content._
import _root_.android.database.Cursor
import _root_.android.os.{Bundle, Handler}
import _root_.android.util.Log
import _root_.android.view.{Menu, MenuItem, View}
import _root_.android.view.{Menu, MenuItem, View, Window}
import _root_.android.widget.ListView
class HubActivity extends ListActivity {
@ -17,7 +17,9 @@ class HubActivity extends ListActivity {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
setContentView(R.layout.hubactivity)
setProgressBarIndeterminateVisibility(true)
getListView().setOnCreateContextMenuListener(this);

Wyświetl plik

@ -0,0 +1,28 @@
package org.aprsdroid.app;
import android.os.AsyncTask;
/**
* Temporary workaround to solve a Scala compiler issue which shows up
* at runtime with the error message
* "java.lang.AbstractMethodError: abstract method not implemented"
* for the missing method LookupTask.doInBackground(String... args).
*
* Our solution: the Java method doInBackground(String... args) forwards
* the call to the Scala method doInBackground1(String[] args).
*/
public abstract class MyAsyncTask<Progress, Result> extends AsyncTask<String, Progress, Result> {
protected abstract Result doInBackground1(String[] args);
@Override
protected Result doInBackground(String... args) {
String[] args1 = new String[args.length];
for (int i = 0; i < args.length; i++) {
args1[i] = args[i];
}
return doInBackground1(args1);
}
}

Wyświetl plik

@ -1,8 +1,9 @@
package org.aprsdroid.app
import _root_.android.app.Activity
import _root_.android.content._
import _root_.android.database.Cursor
import _root_.android.os.{Bundle, Handler}
import _root_.android.os.{AsyncTask, Bundle, Handler}
import _root_.android.text.format.DateUtils
import _root_.android.util.Log
import _root_.android.view.View
@ -75,27 +76,10 @@ class PositionListAdapter(context : Context,
super.bindView(view, context, cursor)
}
def updateMyLocation(lat : Int, lon : Int) {
import PositionListAdapter._
my_lat = lat
my_lon = lon
val new_cursor = mode match {
case SINGLE => storage.getStaPositions(targetcall, "1")
case NEIGHBORS => storage.getNeighbors(mycall, my_lat, my_lon, System.currentTimeMillis - 30*60*1000, "20")
case SSIDS => storage.getAllSsids(targetcall)
}
changeCursor(new_cursor)
}
def reload() {
val cursor = storage.getStaPositions(mycall, "1")
if (cursor.getCount() > 0) {
cursor.moveToFirst()
my_lat = cursor.getInt(StorageDatabase.Position.COLUMN_LAT)
my_lon = cursor.getInt(StorageDatabase.Position.COLUMN_LON)
}
cursor.close()
updateMyLocation(my_lat, my_lon)
val qh = new QueryHandler()
// qh.execute(mycall, targetcall)
qh.onPostExecute(qh.doInBackground1(Array(mycall, targetcall)))
}
def onDestroy() {
@ -103,4 +87,35 @@ class PositionListAdapter(context : Context,
changeCursor(null)
}
class QueryHandler extends MyAsyncTask[Unit, Cursor] {
override def doInBackground1(calls : Array[String]) : Cursor = {
import PositionListAdapter._
Benchmark("doInBackground1") {
val mycall = calls(0)
val targetcall = calls(1)
//var my_lat = 0
//var my_lon = 0
val cursor = storage.getStaPositions(mycall, "1")
if (cursor.getCount() > 0) {
cursor.moveToFirst()
my_lat = cursor.getInt(StorageDatabase.Position.COLUMN_LAT)
my_lon = cursor.getInt(StorageDatabase.Position.COLUMN_LON)
}
cursor.close()
}
mode match {
case SINGLE => storage.getStaPositions(targetcall, "1")
case NEIGHBORS => storage.getNeighbors(mycall, my_lat, my_lon,
System.currentTimeMillis - 30*60*1000, "20")
case SSIDS => storage.getAllSsids(targetcall)
}
}
override def onPostExecute(c : Cursor) {
Benchmark("changeCursor") {
changeCursor(c)
}
context.asInstanceOf[Activity].setProgressBarIndeterminateVisibility(false)
}
}
}

Wyświetl plik

@ -6,7 +6,7 @@ import _root_.android.database.Cursor
import _root_.android.net.Uri
import _root_.android.os.{Bundle, Handler}
import _root_.android.util.Log
import _root_.android.view.{Menu, MenuItem, View}
import _root_.android.view.{Menu, MenuItem, View, Window}
import _root_.android.view.View.OnClickListener
import _root_.android.widget.{ListView,SimpleCursorAdapter}
@ -26,7 +26,9 @@ class StationActivity extends ListActivity with OnClickListener {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
setContentView(R.layout.stationactivity)
setProgressBarIndeterminateVisibility(true)
getListView().setOnCreateContextMenuListener(this);