Открыто несколько экземпляров приложения Android - ТОЛЬКО на Touchwiz
Недавно я работал над приложением для устройств Android - и заметил недоумение, которое возникает только на устройствах под управлением Samsung Touchwiz!
Когда приложение работает на устройстве Touchwiz, возникает ошибка. Ошибка может быть воспроизведена нажатием кнопки "назад", когда приложение находится на переднем плане, а затем повторным запуском с главного экрана (или в любом другом месте, где может быть значок). Из меню многозадачности видно, что система запускает второй экземпляр приложения! Эти вторые экземпляры полностью независимы от первого, и кажется, что эти два никак не связаны.
Я думал, что смогу предотвратить это, добавив singleInstance в Manifest приложений, но, похоже, это не сработало.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>
Интересно отметить, что второй экземпляр "зависает" на заставке приложений - до тех пор, пока этот второй экземпляр не будет выбран из меню многозадачности.
Вот как я работаю с заставкой:
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);
Я также перебил действие кнопок назад в моей основной деятельности:
public void onBackPressed()
{
moveTaskToBack(true);
}
Эта ошибка возникает только на устройствах с TouchWiz. Я протестировал свое приложение на нескольких устройствах, и эту ошибку невозможно воспроизвести ни на одном устройстве, кроме тех устройств Samsung, на которых установлен TouchWiz.
Любые предложения будут с благодарностью.
Большое спасибо!
1 ответ
Проблема, похоже, связана с фильтрами намерений в mainacctivity. удалите фильтры намерений из mainacctivity, которые решат проблему.