Android 4.0.4 Probleme

  • Antworten:18
  • Bentwortet
mcfly
  • Forum-Beiträge: 286

15.07.2012, 11:31:49 via Website

Hallo zusammen

Nach einer relativ langen problemlosen Zeit, haben sich heute gleich mehrere User wegen Problemen mit meiner App gemeldet im Bereich Optionsmenu.
Alle haben gemeinsam die Android Version 4.0.4, die ja ziemlich neu ist ?
Kann mir jemand mit folgenden Fragen weiterhelfen ? :

- Hat jemand von euch auch schon schlechte Erfahrungen mit 4.0.4 im Bereich Optionsmenu gemacht ?
- Wisst Ihr wo man für Eclipse das SDK für 4.0.4 bekommt ( API Level 16 ), sodass man das auch testen könnte ?
- Wenn ich die Version 4.0.4 aus meiner App ( auch Google Play ) excluden möchte, tue ich das mit dem AndroidManifest mit folgendem Eintrag ? Erkennt das GooglePlay und wird das für 4.0.4-Nutzer nicht mehr anzeigen ?

<uses-sdk android:minSdkVersion="6" android:maxSdkVersion="15"/>

Vielen Dank und schönen Sonntag

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.07.2012, 12:29:47 via Website

<uses-sdk android:minSdkVersion="6" android:maxSdkVersion="15"/>

Eine aktuelle Aussage kann ich dazu nicht machen, aber in der Vergangenheit hat das genau so funktioniert, ja.

Antworten
mcfly
  • Forum-Beiträge: 286

15.07.2012, 12:41:50 via Website

Danke vielmals für Deine Hilfe.

Noch eine andere Frage. Ich habe gesehen, dass API Level = Android 4.0.3 und Android 4.0.4 ist.
Weiss jemand wie ich explizit 4.0.4 mit einer AVG in Eclipse testen kann ? In meinem Android SDK Manager steht nach allen Updates immer noch
Android 4.0.3 (API15). Die neueste API16, die ich von Hand installiert habe ist für Android 4.1 ?

Wie kann ich jetzt eine 4.0.4 AVG machen ?

Viele Grüsse

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

15.07.2012, 12:44:35 via App

Der Fehler muss doch schnell zu finden sein.

* Nutzt Du in den Menu Definitionen "showAsAction"?

* Nutzt Du im Manifest hardwareAccelerated="true"?

* Ist in der Manifest targetSdkVersion >=11?

Worauf ich hinaus will: Evtl. hattest Du schon auf Devices ab 4.0 Probleme. Ansonsten hilft nur bei Crashes ein Stack Trace.

Antworten
mcfly
  • Forum-Beiträge: 286

15.07.2012, 13:32:07 via Website

Danke vielmals für die Antowrt

* nein das nutze ich nicht. Mein Konstrukt ist:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.calculate:
...
...
startActivityForResult(myIntent, 0);
}

* hardwareAccelerated="true" habe ich nicht drin.

* Im Manifest habe ich :
<uses-sdk android:minSdkVersion="8" />

Ich hatte schon viele Installationen mit 4.0.3 ( 200 -> für mich viel :-) ). Es sind gekaufte Versionen und ich denke die hätten sich gemeldet. Heute habe ich mehrere Meldungen innerhalb von 2 Stunden mit gleichem Verhalten. ( Habe die App unterdessen deactiviert ). Alle mit 4.0.4.

Grüsse

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

15.07.2012, 14:58:07 via Website

Ich habe versucht herauszubekommen ob Du den neuen ActionBar verwendest - offensichtlich nicht aktiv.

Wenn der Fehler im onOptionsItemSelected auftritt dann hat das damit nichts zu tun. Das sieht mir eher danach aus als würdest Du in diesem Callback etwas nutzen was unter der neuen Version Probleme bereitet. das ist hier aus der Ferne schwierig zu finden.

Kannst Du die Benutzer die sich gemeldet haben um Details bitten (z.B. LogCat mit Hilfe der App Android System Information)?

Antworten
mcfly
  • Forum-Beiträge: 286

15.07.2012, 15:46:26 via Website

Vielen vielen Dank für die Hilfe.

Das mit dem Logcat beim User ist für mich ganz neu und für mich sehr interessant. Ich gehe dem nach.

Ich habe unterdessen die App auch auf einem 4.0.4 Image testen können. Es läuft alles wunderbar. Also doch nicht mein vermutetes Android 4.0.4 Problem.
Nach Aussagen der User und meinem Codereview müsste das Problem beim Aufrufen von einer neuen Activity sein:
startActivityForResult(myIntent, 0);

Anscheinend flackert die neue Activity kurz auf. Bei einigen Aussagen hüpft die App in die vorherige Activity. Bei anderen Aussagen flackert die aufgerufene Activity auch kurz auf und startet aber sofort wieder die vorhergegangene.

Noch irgendeine Idee ?

Ich werde versuchen mit dem User zu debiggen, falls er Nerven dazu hat :-)

Gruess
Andreas

Antworten
mcfly
  • Forum-Beiträge: 286

15.07.2012, 17:18:22 via Website

Ja das verstehe ich, dass man mit diesen Info's nicht viel helfen kann. Das kann gut sein, dass es in der aufgerufenen Activity liegt.
Ich versuche den User mit 'Android System Information' die Logcats auszuwerten.

Vielen Dank auf jedenfall. Der Tip mit der App kann ich auch für zukünftige Probleme gebrauchen.

Schönen Sonntag noch.

Antworten
mcfly
  • Forum-Beiträge: 286

16.07.2012, 14:04:43 via Website

Ich bin wieder ein Stück weiter.
Ich konnte mit einem User den Problemmoment tracen und es ergab folgendes. Es liegt an der aufgerufenen Activity ( meine TextViewerActivity ) und der darin enthaltenen Webview. Ich vermute anhand des Logcats beim User, dass es an WebView.loadDataWithBaseURL liegt.
Kann jemand daraus etwas interpretieren ?

Vielen Dank und Gruesse


1D/KeyguardViewMediator( 2103): setHidden false
2D/KeyguardViewMediator( 2103): setHidden false
3D/dalvikvm(16758): GC_FOR_ALLOC freed 1156K, 11% free 19907K/22279K, paused 20ms
4D/KeyguardViewMediator( 2103): setHidden false
5D/dalvikvm(16758): GC_FOR_ALLOC freed 1198K, 11% free 19897K/22279K, paused 20ms
6D/KeyguardViewMediator( 2103): setHidden false
7D/KeyguardViewMediator( 2103): setHidden false
8D/dalvikvm(16758): GC_FOR_ALLOC freed 1185K, 11% free 19898K/22279K, paused 19ms
9W/webview (16758): java.lang.Throwable: Warning: A WebView method was called on thread 'Thread-1034'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
10W/webview (16758): at android.webkit.WebView.checkThread(WebView.java:14178)
11W/webview (16758): at android.webkit.WebView.loadDataWithBaseURL(WebView.java:3144)
12W/webview (16758): at mypackage.subpackage.TextViewerActivity$6.run(TextViewerActivity.java:500)
13D/KeyguardViewMediator( 2103): setHidden false
14I/ClipboardServiceEx( 2103): Send intent for dismiss clipboard dialog inside hideCurrentInputLocked() !
15D/KeyguardViewMediator( 2103): setHidden false
16D/KeyguardViewMediator( 2103): setHidden false
17D/KeyguardViewMediator( 2103): setHidden false
18D/KeyguardViewMediator( 2103): setHidden false
19D/KeyguardViewMediator( 2103): setHidden false
20D/KeyguardViewMediator( 2103): setHidden false
21I/SurfaceFlinger( 1910): id=765 Removed subpackage idx=1 Map Size=5
22I/SurfaceFlinger( 1910): id=765 Removed subpackage idx=-2 Map Size=5
23D/KeyguardViewMediator( 2103): setHidden false
24D/FirewallPolicy( 2103): getURLFilterEnabled(true)
25D/FirewallPolicy( 2103): isUrlBlocked - Policy disabled
26D/KeyguardViewMediator( 2103): setHidden false
27D/FirewallPolicy( 2103): getURLFilterEnabled(true)
28D/FirewallPolicy( 2103): isUrlBlocked - Policy disabled
29D/FirewallPolicy( 2103): getURLFilterEnabled(true)
30D/FirewallPolicy( 2103): isUrlBlocked - Policy disabled
31D/FirewallPolicy( 2103): getURLFilterEnabled(true)
32D/FirewallPolicy( 2103): isUrlBlocked - Policy disabled
33D/FirewallPolicy( 2103): getURLFilterEnabled(true)
34D/FirewallPolicy( 2103): isUrlBlocked - Policy disabled
35D/KeyguardViewMediator( 2103): setHidden false
36D/KeyguardViewMediator( 2103): setHidden false
37I/GATE (16758): <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
38D/KeyguardViewMediator( 2103): setHidden false
39D/KeyguardViewMediator( 2103): setHidden false
40I/ClipboardServiceEx( 2103): Send intent for dismiss clipboard dialog inside hideCurrentInputLocked() !
41D/KeyguardViewMediator( 2103): setHidden false
42D/KeyguardViewMediator( 2103): setHidden false
43D/KeyguardViewMediator( 2103): setHidden false
44D/KeyguardViewMediator( 2103): setHidden false
45I/SurfaceFlinger( 1910): id=766 Removed TextViewerActivity idx=3 Map Size=4
46I/SurfaceFlinger( 1910): id=766 Removed TextViewerActivity idx=-2 Map Size=4
47D/KeyguardViewMediator( 2103): setHidden false
48I/power ( 2103): *** release_dvfs_lock : lockType : 1
49D/PowerManagerService( 2103): releaseDVFSLockLocked : all DVFS_MIN_LIMIT are released
50W/ActivityManager( 2103): mDVFSLock.release()
51I/SurfaceFlinger( 1910): id=767 Removed TextViewerActivity idx=1 Map Size=3
52I/SurfaceFlinger( 1910): id=767 Removed TextViewerActivity idx=-2 Map Size=3
53I/ActivityManager( 2103): Process mypackage.subpackage (pid 16758) has died.

— geändert am 16.07.2012, 14:08:47

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

16.07.2012, 16:18:29 via Website

Die Fehlermeldung ist ja wohl eindeutig. Von wo rufst Du das Laden auf? Bist Du außerhalb des UI-Threads?

Warning: A WebView method was called on thread 'Thread-1034'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

Antworten
mcfly
  • Forum-Beiträge: 286

16.07.2012, 19:43:17 via Website

Mir ist es leider nicht klar.

Ich versuche meinen Code vereinfacht zu beschreiben.
- Ich habe eine Hauptactivity A. Von dort rufe ich die Activity B auf.
- In Activity B habe ich eine Webview:

vereinfachter Code der Activity B:

1public class TextViewerActivity extends Activity {
2..
3..
4..
5WebView wv;
6 public void onCreate(Bundle savedInstanceState) {
7 ...
8 ...
9 wv=(WebView)findViewById(R.id.mywebview);
10
11
12 ...
13 ...
14 loadWebview();
15
16 wv.setWebViewClient(new WebViewClient() {
17 ....
18 .....
19 }
20
21}
Ich hatte 2 Varianten, die beide nicht funktionieren
1// Variante 1
2public void loadWebview(){
3
4 progressBar = ProgressDialog.show(this, "", "Loading...");
5
6 runOnUiThread(new Runnable() { // Das habe ich jetzt gerade neu gecoded, ergibt aber das gleiche Problem.
7 public void run() {
8 sHTML="<b>irgendwas</b>";
9 wv.loadDataWithBaseURL("file:///" + PathtoImages, sHTML, "text/html", "utf-8", "");
10
11
12 Message mymessage = new Message();
13 Bundle resBundle = new Bundle();
14 resBundle.putString("fertig", "");
15 mymessage.setData(resBundle);
16 CloseProgressHandler.sendMessage(mymessage);
17
18 }
19 }
20}
1// Variante 2
2public void loadWebview(){
3
4 progressBar = ProgressDialog.show(this, "", "Loading...");
5
6 new Thread() {
7
8 public void run() {
9 sHTML="<b>irgendwas</b>";
10 wv.loadDataWithBaseURL("file:///" + PathtoImages, sHTML, "text/html", "utf-8", "");
11
12
13 Message mymessage = new Message();
14 Bundle resBundle = new Bundle();
15 resBundle.putString("fertig", "");
16 mymessage.setData(resBundle);
17 CloseProgressHandler.sendMessage(mymessage);
18
19 }
20 }.start();
21}

— geändert am 16.07.2012, 19:44:22

Antworten
mcfly
  • Forum-Beiträge: 286

17.07.2012, 07:18:24 via App

Ich habe die 3. Variante probiert und die scheint auch nicht zu gehen. ( aber der tip war gut, vielen Dank )
Allerdings weiss ich nicht ob der Fehler jetzt noch derselbe ist.
Ich werde jetzt grosszuegig Debugstatements einfuegen (logv) auf der Basis von Variante 3 und den User nochmals bitten das logcat zu schicken. Zum Glueck ist der User so entgegenkommend.

Ich bleibe am Ball und werde wieder informieren.

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

17.07.2012, 08:56:19 via Website

Ist das ein Test?

Die Fehlermeldung ist eindeutig: Irgendeine Methode Deines WebView läuft nicht im UI-Thread. Punkt. Ende. Aus.

Pack den ganzen Kram mal zum Beispiel in das onCreate der Activity die dieses WebView beinhaltet. Kein Thread drumherum.

Was passiert?

Antworten
mcfly
  • Forum-Beiträge: 286

17.07.2012, 10:45:47 via App

Hallo Harald

Meine dritte Variante war diese ohne thread. Der Thread ist voll draussen.
Diese Variante habe ich dem User geschickt. Nach seiner Aussage verhält es sich genau gleich. Allerdings weiss ich nicht ob es die gleiche Ursache ist. Koennte ja sein, dass unterdessen im Logcat was anderes drin steht.

Ein Kollege vom User mit gleichem Device und gleicher Androidversion hat keine Probleme mit der App. Trotzdem gehe ich dem nach, weil ich schon 4 Meldungen mit gleichem Problem bekommen habe.

Ich schreibe jetzt mehrere Debugmeldungen raus mit der Variante ohne Thread und bitte den User um ein neues Logcat.

Danke und Grüsse ich melde mich wieder wenn ich mehr infos habe.

Antworten
mcfly
  • Forum-Beiträge: 286

19.07.2012, 07:56:46 via Website

Hallo Harald, hallo zusammen

Endlich habe ich das Problem gefunden !
Es lag gar nicht an meinem Code ( denke ich, siehe Frage weiter unten ).
Die Leute hatten die Developer-Einstellung 'Keine Aktivitaeten beibehalten' aktiviert. Diese hatte zur Folge, dass die Activities nicht richtig angezeigt wurden. ( Systemeinstellung->Entwickleroptionen->'Keine Aktivitaeten beibehalten' )

Diese Option sei bei den Usern default schon eingestellt gewesen, da es sich gar nicht um Entwickler handelt. Das ist schon sehr ärgerlich :-(

Fragen:
- Hätte ich das irgendwie von meiner Seite als App verhindern, detektieren können ? Oder besser einfach Finger davon ?
- Soll ich das mit dem runOnUiThread einbauen, da das mit der Webview-Warnung sicher auch nicht ganz korrekt ist ?


freundlich Grüsse

— geändert am 19.07.2012, 07:58:26

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

19.07.2012, 08:47:38 via App

Diese Einstellung hat auf sauberen Code keinen Einfluss. Du musst immer davon ausgehen das alles mal weg sein könnte - Android ist da gnadenlos.

Dein mehrfach geposteter, vereinfachter Code suggeriert das das Laden im onCreate geschieht. Das kann aber nicht sein, da der LogCat dem widerspricht. Ich kann Dir Deine UI- Thread Frage nicht ohne Details beantworten.

Antworten
mcfly
  • Forum-Beiträge: 286

19.07.2012, 08:55:43 via Website

Hoi Harald

Vielen Dank für Deine Hilfe. Ich dachte auch es läge an der Webview, was nach Log ja eindeutig aus was falsches hindeutete.
Ich baue das mit dem uithread so um, da das auf meinen 3 Geräten problemlos funktioniert.

Vielen herzlichen Dank für Deine Hilfe. Es hat mich zumindest motiviert weiterzuhaken und so doch noch auf eine Lösung zu kommen, die mir jetzt schlussendlich sehr geholfen hat.

Grüsse

— geändert am 19.07.2012, 08:56:04

Antworten