Android应用程序的多个实例打开 - 仅限Touchwiz

时间:2016-07-25 18:38:47

标签: java android android-manifest multiple-instances samsung-touchwiz

我最近一直在研究Android设备的应用程序 - 我注意到一个令人困惑的问题,只发生在运行Samsung Touchwiz的设备上!

当应用程序在 Touchwiz 设备上运行时,会发生错误。按下"返回"可以重现该错误。应用程序在前台时按钮 - 然后从主屏幕(或图标可能的任何其他位置)再次启动它。查看多任务菜单,很明显系统会启动应用程序的第二个实例!第二个实例完全独立于第一个实例,并且这两个实例似乎没有以任何方式连接。

我认为我可以通过将singleInstance添加到应用程序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>

值得注意的是,第二个实例&#34;冻结&#34;在应用程序启动画面 - 直到从多任务菜单中单击第二个实例。

这就是我处理启动画面的方式:

 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的三星设备之外,这个bug无法在任何设备上重现。

任何建议都将不胜感激。

非常感谢!

1 个答案:

答案 0 :(得分:1)

问题似乎与mainactivity中的intent过滤器有关。从主要活动中移除意图过滤器以解决问题。