Option 'Keine Aktivitäten beibehalten'

  • Antworten:11
mcfly
  • Forum-Beiträge: 286

09.08.2012, 08:47:49 via Website

Hallo zusammen

Wieder mal ein Problem :-)
Ich bekomme Meldungen von meinen ICS ( IceCreamSandwich) Benutzern, dass sich in meiner App eine zusätzliche Activität nicht öffnen lässt.
Meine App hat eine Hauptactivität und ich öffne auf Knopfdruck per Intent eine 2. Aktivität. Die 2. Aktivität zuckt kurz auf und verschwindet ( So scheint es ) und die Hauptaktivität wird neu gestartet. ( Das sehe ich, da ich einige Dinge beim Start der 1. Aktivität mache ).

Meine bisherige Lösung dazu war eine Option in den Systemeinstellungen zu deaktivieren. Bei all den Usern war die Option :
Einstellungen -> {} Entwickler-Optionen -> 'Keine Aktivitäten beibeh.' aktiviert.

Habe ich schlecht programmiert, oder wie würdet Ihr damit umgehen ?

Grüsse

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 10:45:34 via Website

Hallo Rafael

Ja ich habe einen Thread zu diesem Thema gestartet. Allerdings gings dort um die Suche der Ursache und ich fand dann auch das Problem. Die Lösung war, die erwähnte Entwickleroption zu deaktivieren. ( Was ja eigentlich bei normalusern nicht aktiviert sein sollte )

Jetzt melden sich immer mehr User mit dem selben Problem und ich denke, das sollte sich doch irgendwie technisch vermeiden lassen.

Ich frage mich, ob ich der einzige bin, der dieses Problem hat. Wenn ja, muss es ja dann doch an meinem Code liegen :-)

Grüsse

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

09.08.2012, 11:00:46 via Website

Hi,

habe jetzt gerade mal diese Option aktiviert, aber bei mir verschwindet dann eine aufgerufene Activity nicht sofort wieder. Sondern bleibt schön da, wo sie ist...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 12:29:08 via Website

Hallo Carsten

Vielen herzlichen Dank für den Check. Das ist sehr wertvoll für mich zu wissen, dass es generell geht.
Ich versuche jetzt ein ganz einfaches Beispiel für meine App zu machen. Falls ich den Fehler nicht fide, würde ich den Code hier mal posten. Vielleicht sieht jemand das Problem.

Ich habe auch noch mit anderen Apps getestet. Der GO-Launcher hat genau das selbe Problem wie bei mir. Sobald diese Option aktiviert ist, lässt sich zum Beispiel die 'Einstellungen'-Option nicht meh öffnen. Go-Launcher meldet dann auch , dass die Option 'Aktivitäten schliessen' aktiviert ist und man solle das rausnehmen. Ich vermute, dass er auch mit dem Memoryverbrauch der Parentactivity liegen könnte. Weil diese Option anscheinden mit bestimmten Regeln Aktivities killt. Das ist aber einfach eine Vermutung/Behauptung von mir :-)

Ich forsche weiter und informiere euch wieder.
Grüsse

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

09.08.2012, 12:36:13 via App

Es ist also auch nicht bei jeder Deiner Activities so?

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 12:49:33 via Website

Hi Carsten

Doch es ist bei jeder Activity das Problem. Das bestätigen mir auch die User.
Ich habe jetzt bei meiner einfachsten Activity den ganzen Code auskommentiert, sodass ich nur noch folgendes habe. Das Problem besteht immer noch. Die Parentactivity wird neu gestartet.

1@Override
2 public void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4
5
6 /*
7 Ganzer Code auskommentiert
8 */
9
10}

Meine Activities rufe ich alle nach folgendem Prinzip auf:

1Intent myIntent2 = new Intent(this, InfoActivity.class);
2StartActivityForResult(myIntent2, 0);

Ich denke ich kann da Codemässig nichts mehr unternehmen. Ich versuche ein einfaches Beispiel meiner Parentapp zu machen und nochmals zu testen. Allerdings glaube ich, dass ich auch eine Meldung ausgeben muss, wie es GO-Launcher macht, um auf das Problem hinzuweisen.

Wüsste jemand, wie man die Developer-optionen ausliest ? Dieses Setting habe unter Klasse Settings nicht gefunden

Grüsse

— geändert am 09.08.2012, 12:56:19

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 14:21:32 via Website

Hallo Harald

Ja das ist die Option "Keine Aktionen beibehalten". Beim Go-Launcher habe ich das Problem.



Meine Activity ist leer und macht nichts. Im Log-Cat steht überhaupt nichts. Die Logeinträge beginnen mit dem Start meiner Hauptactivity.
Wenn ich simple Dinge in der Subactivity mache, dann kann diese auch debuggen. D.h. ich bin wirklich schon in der Subactivity drin.
Sobald der onCreate von der Subactivity durch ist, wird die Hauptactivity neu gestartet. D.h. ist bei allen meinen 7 Activities.

Jetzt versuche ich diese Option auszulesen und auch eine Warnung beim Start auszugeben.
Nur finde ich nicht raus wie ?

Grüsse

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

09.08.2012, 16:06:43 via Website

Das kann es nicht sein. Die App muss laufen - egal was diese Einstellung her gibt. Das Launcher empfindlicher sind als normale Apps ist klar. Das sieht mir nach etwas anderem aus. Papp mal ein Layout in die Subactivity rein und starte diese mit startActivityForResult. Ersetz auch mal die 0 durch eine 1 im startActivityForResult. Das muss einfach gehen.

Hast Du irgendwelche Settings im Manifest overruled? Ich denke da an launchMode etc.

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 17:12:26 via Website

Hallo

Ich habe beides ausprobiert. Intent übergeben mit 1 -> das Problem bleibt.
Ich habe bereits ein Layout auf der simplen Activity. -> mit oder ohne ergibt restart der mainactivity.

Aber eventuell liegts wirklich an der AndroidManifest.xml :
Ich habs mal reingepastet. Ich habe ein <category android:name="android.intent.category.LAUNCHER" /> drin ?
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal"
3 package="mypackage.myapp"
4 android:versionCode="59" android:versionName="1.61">
5 <application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">
6 <activity android:name=".MyApplication" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">
7 <intent-filter>
8 <action android:name="android.intent.action.MAIN" />
9 <category android:name="android.intent.category.LAUNCHER" />
10 </intent-filter>
11 </activity>
12 <activity android:name=".BookmarkActivity" android:configChanges="orientation|keyboardHidden" android:label="bookmark">
13
14 </activity>
15 <activity android:name=".SearchActivity" android:configChanges="orientation|keyboardHidden" android:label="search">
16
17 </activity>
18
19 <activity android:name=".OptionsActivity" android:configChanges="orientation|keyboardHidden" android:label="options">
20
21 </activity>
22
23 <activity android:name=".InfoActivity" android:configChanges="orientation|keyboardHidden" android:label="info">
24
25 </activity>
26 <activity android:name=".HelpActivity" android:configChanges="orientation|keyboardHidden" android:label="help">
27
28 </activity>
29 <activity android:name=".TextViewerActivity" android:configChanges="orientation|keyboardHidden" android:label="textviewer">
30 </activity>
31 <activity android:name=".YearPickerActivity" android:configChanges="orientation|keyboardHidden" android:label="timemachine">
32 </activity>
33
34 <activity android:name="org.acra.CrashReportDialog"
35 android:theme="@android:style/Theme.Dialog"
36 android:launchMode="singleInstance"
37 android:excludeFromRecents="true"
38 android:finishOnTaskLaunch="true" />
39
40
41 </application>
42 <uses-sdk android:minSdkVersion="8" />
43 <uses-permission android:name="android.permission.VIBRATE"/>
44
45<uses-permission android:name="android.permission.INTERNET"></uses-permission>
46<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
47</manifest>

Antworten
mcfly
  • Forum-Beiträge: 286

09.08.2012, 21:38:21 via Website

Hallo zusammen

Ich habe jetzt zwar einen Fehler bei mir gefunden, aber das Problem ist im Prinzip immer noch das selbe. Ich hatte einen onDestroy Methode, welche die Subactivity beim öffnen verhinderte und die Mainactivity neu startete. D.h. ich kann jetzt die Subactivity öffnen und diese bleibt.
Allerdings wenn ich zurückgehe mit back, dann wird die Mainactivity neu gestartet. ( Wie die Entwickleroption auch aussagt, keine Aktivitäten behalten )

Ich habe das anhand eines ganz neuen Beispiels, sogar vom Eclipse Framework ohne selber zu codieren erstellt, ausprobiert.
Es ist meiner Meinung nach so, dass die Mainactivity gekillt wird. Man sieht das vielleicht nicht, wenn man nicht explizite prüft.

Folgend mein neu aufgebautes Beispiel. Beim start wird ein Toast mit "first start of application ..." ausgegeben. Mit dem Contextmenu öffne ich eine Subactivity ( Ich habe nichts selber codiert, sondern das Framework hat mir ein HelloWorld Activity erstellt. ) Ich sehe das HelloWorld erscheinen.
Mit back möchte ich auf die vorherige Maske zurück. Geht, aber es erscheint erneut die Meldung "first start of application ...".

Hat jemand einen Tip, wie man dem begegnen könnte ?


1package com.example.textactivities;
2
3
4import android.os.Bundle;
5import android.app.Activity;
6import android.content.Intent;
7import android.view.Menu;
8import android.view.MenuInflater;
9import android.view.MenuItem;
10import android.widget.Toast;
11import android.support.v4.app.NavUtils;
12
13public class MainActivity extends Activity {
14
15 boolean bfirststart=true;
16
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.activity_main);
21
22 if (bfirststart){
23 Toast.makeText(this, "first start of application ...", Toast.LENGTH_LONG).show();
24 bfirststart=false;
25 }
26 }
27
28 @Override
29 public boolean onCreateOptionsMenu(Menu menu) {
30 getMenuInflater().inflate(R.menu.activity_main, menu);
31 return true;
32 }
33
34 @Override
35 public boolean onOptionsItemSelected(MenuItem item) {
36 switch (item.getItemId()) {
37
38 case R.id.menu_settings: //Toast.makeText(this, "You pressed the icon and text!", Toast.LENGTH_LONG).show();
39 Intent myIntent2 = new Intent(this, SubActivity.class);
40 startActivityForResult(myIntent2, 0);
41 break;
42 }
43 return true;
44 }
45}

Antworten