Ich habe vor kurzem an einer Anwendung für Android-Geräte gearbeitet - und ich habe festgestellt, ein verblüffendes Problem, das nur auf Geräten mit Samsung Touchwiz auftritt!Mehrere Instanzen von Android-Anwendung geöffnet - NUR auf Touchwiz
Wenn die Anwendung auf einem Touchwiz Gerät ausgeführt wird, tritt der Fehler auf. Der Fehler kann reproduziert werden, indem die "Zurück" -Taste gedrückt wird, während sich die Anwendung im Vordergrund befindet, und dann erneut vom Startbildschirm aus gestartet wird (oder wo auch immer das Symbol angezeigt wird). Im Multitasking-Menü wird deutlich, dass das System eine zweite Instanz der Anwendung startet! Diese zweite Instanz ist völlig unabhängig von der ersten Instanz und die beiden scheinen in keiner Weise verbunden zu sein.
Ich dachte, dass ich dieses Verhalten verhindern konnte, indem ich singleInstance dem Manifest der Anwendungen hinzufügte, aber das schien den Trick nicht zu machen. Manifest:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:launchMode="singleInstance">
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Settings_area"
android:screenOrientation="portrait" />
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyDieXTCaFoIL0kJ_IM4UMBSQL3sNn92AWM" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps" />
<activity android:name=".Splash"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".aboutPageActivity" />
<activity android:name=".turnOffFromNotification"
android:noHistory="true"></activity>
</application>
Es ist interessant, dass die zweite Instanz beachten „Friert“ auf den Anwendungen Bildschirm spritzen - Tasking-Menü - bis diese zweite Instanz aus dem Multi geklickt wird.
Dies ist, wie ich den Splash-Screen am Umgang:
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
/* Create an Intent that will start the Menu-Activity. */
Intent mainIntent = new Intent(Splash.this,MainActivity.class);
Splash.this.startActivity(mainIntent);
Splash.this.finish();
}
}, splashDisplayLength);
ich auch über fuhr mit der Zurück-Tasten Aktion in meiner Haupttätigkeit:
public void onBackPressed()
{
moveTaskToBack(true);
}
Dieser Fehler nur tritt bei Geräten mit TouchWiz auf. Ich habe meine Anwendung auf mehreren Geräten getestet und dieser Fehler kann auf keinem Gerät reproduziert werden, mit Ausnahme von Samsung Geräten, auf denen TouchWiz ausgeführt wird.
Alle Vorschläge werden sehr geschätzt.
Vielen Dank!
haben Sie versucht, den Prozess bei gedrückter Taste zu beenden? wenn nicht, versuchen Sie es android.os.Process.killProcess (android.os.Process.myPid()); – Muthu
Hallo @Muthu, ich möchte den Prozess nicht beenden, wenn der Benutzer den Zurück-Knopf drückt - um ihn einfach in den Hintergrund zu schicken! – traintrax8
können Sie Intent-Filter von MainActivity entfernen und überprüfen? – Muthu