German Wieso Activity pause, userclosed = false?

danebn11

Member
Licensed User
Hallo,

mir fällt immer wieder auf, dass mein Handy mit Android 6 immer wieder auf den Homescreen springt, wenn ich meine App geöffnet habe.
Das geschieht meistens, wenn ich auf irgendeinen Button drücke. Dabei wird bei diesen Buttons nur ein Zähler erhöht und keine Activity gestartet oder geschlossen.
Im Log finde ich nur "Activity pause, userclosed = false".

Bei meinem neuen Handy mit Android 9 ist das nicht der Fall.

Weiß jemand, wie und durch welche Ereignisse ein Activity noch pausiert werden kann?

Danke für eure Antworten
 

DonManfred

Expert
Licensed User
Longtime User
Das geschieht meistens, wenn ich auf irgendeinen Button drücke. Dabei wird bei diesen Buttons nur ein Zähler erhöht und keine Activity gestartet oder geschlossen.
Wie definierst Du "nur ein Zähler erhöht"? rufst du eine Webapi auf (okhttputils2) oder änderst Du "nur" ein Editfeld/label?
 

so27

Active Member
Licensed User
Longtime User
Also wenn Du etwas in der App zählst, dann würde ich die Werte speichern, sobald das Activity pausiert wird. Im Bereich Activity_Resume kannst Du den Wert dann wieder an das Element (Label, Textfeld...) übergeben.
 

danebn11

Member
Licensed User
Ich zähle dabei nur einen Integer hoch oder runter welcher über ein Label angezeigt wird.
Das Problem ist, dass das Activity nicht pausieren soll, aber es macht es trotzdem
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Zeig doch mal ein Code Beispiel was Du da machst.
 

danebn11

Member
Licensed User
B4X:
Sub Button_plus_1_click
    i = 1
    counter(i) = counter(i) + 1
    If counter(i) < 10 Then
        Labels_Anzahl(i).text = "0" & counter(i)
    Else
        Labels_Anzahl(i).Text = counter(i)
    End If
End Sub

Das wäre der Code von einem der Button, ist eigentlich nichts besonderes.

Kann man irgendwie abfragen, wieso ein Activity pausiert wird bzw. wurde?
 

danebn11

Member
Licensed User
Mir ist es jetzt schon öfters bei verschiedenen Situationen bzw. Buttons aufgefallen.
Ich weiß nun auch, wie diese Situation entsteht, kann es mir allerdings nicht erklären.

  1. Start der App --> läuft alles normal, wie es soll
  2. App wird per HomeButton verlassen
  3. App wird wieder geöffnet
  4. Beschriebener Fehler tritt auf, auch wenn man die App immer wieder verlässt und wieder öffnet
  5. Beenden des Tasks der App und erneut Starten --> läuft normal
Das kann man immer wieder wiederholen.
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Zeig doch mal das ganze Activity oder ein Beispiel Projekt als Zip exportieren über Datei Menü.

Siehe auch NumberFormat NumberFormat2 das spart das If Then statt 5 Zeilen nur eine.

Startest Du deine App zum testen auch im Debug Modus? Benutzt Du Haltepunkte?
 
Last edited:

danebn11

Member
Licensed User
Ja, kann ich heute oder morgen machen, wenn ich zu Hause bin.

Das Problem ist, ich habe es jetzt schon auf mehreren Handys getestet. Die App funktionierte bei jedem. Nur bei dem einen mit Android 6 nicht richtig.
Deswegen vermute ich, dass das Activity irgendwie anders pausiert wird. (Betriebssystem ?).

Darum würde es mich interessieren, ob man herausfinden kann wer oder was "Activity pause, userclosed = false" verursacht.
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Das ein Betriebsystem spinnt wegen fehlendem Patch/Update habe ich schon öffters erlebt.
Kann es zumindest mal testen auf mein Tablet das hat OS 6.1
Könnte auch an der Android SDK/NDK Version liegen welche Du nutzt um die APK zu erstellen.
 

danebn11

Member
Licensed User
Ich habe gerade gemerkt, dass es egal ist, worauf ich klicke bei diesem Fehler. Das Activity wird immer pausiert.
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Haste die App mal deinstalliert und wieder neu drauf gemacht?
.. dieses Gerät mal neu gestartet?
.. mal ein neues Projekt ausprobiert was da passiert?
.. mal minSdkVersion und targetSdkVersion verändert?
.. da was spezielles im Manifest für Android 6?
.. Debug Modus und Filter Häkchen entfernt im Protokoll Fenster
 

danebn11

Member
Licensed User
Neu installiert und neu gestartet: natürlich
Was meinst du genau mit neues Projekt ausprobiert?
min und targetSDK werde ich morgen probiern --> soll aber nicht Problemlösung sein

Manifest:
B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "App1")
'End of default text.
AddPermission(android.permission.ACCESS_FINE_LOCATION)
AddPermission(android.permission.ACCESS_NETWORK_STATE)
AddPermission(android.permission.ACCESS_WIFI_STATE)
AddPermission(android.permission.CHANGE_WIFI_STATE)
AddPermission(android.permission.INTERNET)
AddPermission(android.permission.WAKE_LOCK)
'AddPermission(android.permission.ACCESS_COARSE_LOCATION)

Arbeite eigentlich immer im Release Mode

Was bewirkt das Filter Häckchen?


Es bringt leider glaube ich nichts, wenn ich meine App zum Testen gebe, da 90% der angezeigten Elemente über FTP in meinem WLan geladen werden und somit für euch nicht testbar ist.
 

danebn11

Member
Licensed User
Konnte die App jetzt auf mehreren Handys testen:
2x Android 9 : kein Problem
Android 5.0.1: kein Problem

noch ein weiteres Handy mit 6.0: anderer Fehler, allerdings ähnlich
Bei diesem Handy funktioniert der HomeButton nicht immer, wenn die App läuft
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Arbeite eigentlich immer im Release Mode
Was bewirkt das Filter Häckchen?

Release Modus ist eigentlich das End Produkt für den Anwender.
Oder damit man es ohne Verbindung zum Debugger testen kann...
Bei der Entwicklung & Fehlersuche ist Debugging und das Protokoll sehr wichtig weil es Hinweise gibt, auch im Fehlerfall die Zeile sagt etc.

Mit neues Projekt meinte ich eine neue App zum Experimente machen.
Wenn das Protokoll gefiltert ist ist es halt gröber und weniger nützlich.

Bei einer normalen Fehlersuche im Debug Modus bekommt man die Funktion (Sub) heraus, die Zeile & die Stelle wo es kracht. Haltepunkte sind da auch sehr nützlich.
Dann prüft man die Werte die an diese Funktion über geben worden sind, ob böse globale Variablen benutzt wurden auch stimmen,
geht die Bedingungen im Kopf durch und dann sollte es Klick machen.
Wenn man keinen Fehler erkennen kann könnte es die Runtime Umgebung sein oder eine Bibliothek die nicht so recht paßt.
Sehr nützlich sind auf jedenfall Debug Ausgaben mit Log(...) weil man dann sehr genau den Programm Ablauf sehen kann.

Das Activity wird immer pausiert.
pausiert würde ich nicht so wörtlich nehmen.
Diese Activitys haben halt eine gewisse Ereignisreihenfolge.
 
Last edited:

danebn11

Member
Licensed User
Das wären die letzten Zeilen im log...ich kenne mich leider damit nicht wirklich aus.
Erkennt man darin, wer oder was das Activity pausiert?

B4X:
acquireWakeLockInternal: lock=81535270, flags=0x1, tag="*launch*", ws=WorkSource{10015}, uid=1000, pid=809
updateWakeLockSummaryLocked: mWakefulness=Awake, mWakeLockSummary=0x1
updateUserActivitySummaryLocked: mWakefulness=Awake, mUserActivitySummary=0x1, nextTimeout=2200315 (in 23926 ms)
requestPowerState: policy=BRIGHT, useProximitySensor=false, screenBrightness=178, screenAutoBrightnessAdjustment=0.0, brightnessSetByUser=true, useAutoBrightness=false, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=-1, dozeScreenState=UNKNOWN, waitForNegativeProximity=false
setBrightness mButtonLight 0.
updateDisplayPowerStateLocked: mDisplayReady=true, policy=3, mWakefulness=1, mWakeLockSummary=0x1, mUserActivitySummary=0x1, mBootCompleted=true, mScreenBrightnessBoostInProgress=false
** Activity (Seite1) Pause, UserClosed = false **
 

danebn11

Member
Licensed User
In der Main Activity passiert auch das selbe:

B4X:
updateDisplayPowerStateLocked: mDisplayReady=true, policy=3, mWakefulness=1, mWakeLockSummary=0x1, mUserActivitySummary=0x1, mBootCompleted=true, mScreenBrightnessBoostInProgress=false
onWakeLockAcquired: flags=1, tag="*launch*", packageName=android, ownerUid=1000, ownerPid=809, workSource=WorkSource{10015}
Start Kommunikation 4
** Activity (main) Pause, UserClosed = false **
ACT-AM_ON_PAUSE_CALLED ActivityRecord{875ab64 token=android.os.BinderProxy@7aaa1cd {com.Daniel.App1/com.Daniel.App1.main}}
InputReader:: getSwitchState lock

Hier sieht es allerdings so aus, wie wenn in der nächsten Zeile das pausieren irgendwie erkannt wurde.
"Start Kommunikation 4" ist ein log von mir: dabei wird ein Service gestartet
 

MarkusR

Well-Known Member
Licensed User
Longtime User
Das wären die letzten Zeilen im log...ich kenne mich leider damit nicht wirklich aus.
Erkennt man darin, wer oder was das Activity pausiert?

Das Log von Start bis Ende ohne Filter hätte auch nicht geschadet.
Sehe da nur was von PowerManager & WakeLock.

Versuche es mal mit Haltepunkte und laß deine App dann immer ein weiter zum nächsten laufen.
Was auch helfen könnte ist Dinge auskommentieren als Block oder mit If 1=0 Then
 

pucki

Active Member
Licensed User
Ich habe mir dein Code mal angesehen.

Ich wusste gar nicht das man OBJEKTE in ein Array zusammenfassen kann. Ist das möglich. ?? Wenn nicht liegt vielleicht daran das Problem.

If counter(i) < 10 Then
Labels_Anzahl(i).text = "0" & counter(i)
Else
Labels_Anzahl(i).Text = counter(i)
End If

Falls man doch Objekte (hier Labels_Anzahl ) in ein Array zusammenfassen kann, möchte ich doch gerne mal wissen wie das geht.

Gruß

Pucki
 
Top