Hallo zusammen,
ich habe ein Problem mit meinem Lifecycle.
Ich rufe von einer Activity die zxing Barcodescanner App auf.
Hier die Methode im IntenIntegrator:
public AlertDialog initiateScan(Collection<String> desiredBarcodeFormats) {
Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);
// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
// set the desired barcode types
StringBuilder joinedByComma = new StringBuilder();
for (String format : desiredBarcodeFormats) {
if (joinedByComma.length() > 0) {
joinedByComma.append(',');
}
joinedByComma.append(format);
}
intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
}
String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
return showDownloadDialog();
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
activity.startActivityForResult(intentScan, REQUEST_CODE);
return null;
}
Alles anzeigen
und dann geht der Spaß los. im onActivityResult verarbeite ich das Ergebnis:
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null && scanResult.contents.length() != 0) {
this.scanResultBarcode = scanResult.contents;
try
{
progressbar.setVisibility(View.VISIBLE);
webApi.addRequest(this.settings.getUser(), this.settings.getPassword(), this.scanResultBarcode);
Log.e(TAG, "Api request send");
}
catch (RemoteException ex)
{
Log.i("EXCEPTION_SCAN", "Api request failed");
}
}
Alles anzeigen
ich schiebe den Barcode in einen Hintergrundprozess, wo er an einen SOAP Service geschickt wird. Genau hier habe ich das Problem.
Hier wird in der Ursprungs-Activity ab und an das onDestroy(nicht immer) aufgerufen und somit wird meine wepApi null:
@Override
protected void onDestroy()
{
super.onDestroy();
try
{
if (this.webApi != null)
{
this.webApi.removeListener(this.webListener);
}
getApplicationContext().unbindService(this.serviceConnection);
stopService(this.webIntent);
Log.e(TAG, "Service stopped from Activity");
}
catch(RemoteException ex)
{
Log.e(TAG, "Failed to unbind from the service", ex);
}
}
Alles anzeigen
Hier hängt sich meine App natürlich auf. Ich vermute ja, dass Android aufgrund von Speicherplatz einfach meine Ursprungs-Activity killt. Aber wie gehe ich dagegen vor? Kann ich das irgendwie verhindern? Oder habe ich eine Möglichkeit meine webApi zu sichern?
Viele Grüße
Christian