最近、Android デバイス用のアプリケーションに取り組んでいますが、Samsung Touchwiz を実行しているデバイスでのみ発生する厄介な問題に気付きました!
アプリケーションがTouchwizデバイスで実行されている場合、バグが発生します。このバグは、アプリケーションがフォアグラウンドにあるときに「戻る」ボタンを押して、ホーム画面 (またはアイコンがある場所) から再度起動することで再現できます。マルチタスク メニューを見ると、システムがアプリケーションの 2 番目のインスタンスを起動していることがわかります。この 2 番目のインスタンスは最初のインスタンスから完全に独立しており、2 つのインスタンスはまったく関連していないようです。
アプリケーションのマニフェストに singleInstance を追加することで、この動作を防ぐことができると思っていましたが、うまくいかなかったようです。 マニフェスト:
<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>
この 2 番目のインスタンスがマルチタスク メニューからクリックされるまで、アプリケーションのスプラッシュ画面で 2 番目のインスタンスが「フリーズ」することに注意してください。
これは私がスプラッシュスクリーンを処理する方法です:
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 を搭載したデバイスでのみ発生します。いくつかのデバイスでアプリケーションをテストしましたが、このバグは、TouchWiz を実行している Samsung デバイス以外のデバイスでは再現できません。
どんな提案でも大歓迎です。
どうもありがとうございました!