【问题标题】:Android how to kill previous application instance while launching new instanceAndroid如何在启动新实例时杀死以前的应用程序实例
【发布时间】:2014-01-15 05:53:55
【问题描述】:

我使用了 android:launchMode="singleInstance",它停止创建应用程序的另一个实例,同时保留第一个实例。

这是我的活动配置信息

<activity
        android:name="com.abc.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.ABC"
        >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data
                android:host="192.168.0.52"
                android:scheme="http" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

【问题讨论】:

  • 你声称用过,但你的配置好像没有!
  • 这就是我正在使用的!它是从一些外部源链接启动时可调试的吗? if (!isTaskRoot()) { final Intent intent = getIntent();最终字符串 intentAction = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_DEFAULT)&&intent.hasCategory(Intent.CATEGORY_BROWSABLE) && intentAction != null && intentAction.equals(Intent.ACTION_VIEW)) { finish(); } }

标签: android process state launching-application android-launcher


【解决方案1】:

听起来您正在尝试重新启动您的应用。您可以通过在不久的将来设置警报来启动您的应用程序并同时终止现有进程来做到这一点。

这可以通过以下代码实现:

AlarmManager alarm = (AlarmManager) MyActivity.this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(MyActivity.this, 0, new Intent(MyActivity.this, MyActivity.class), 0));
android.os.Process.sendSignal(android.os.Process.myPid(), android.os.Process.SIGNAL_KILL);

【讨论】:

  • 但两个实例都携带不同的应用数据。假设 instanceA 携带来自 sourcelinkA 的 Bob 的信息。如果应用程序是从初始化带有 Foo 信息的 instanceB 的 sourcelinkB 启动的,那么在这种情况下,应用程序应该使用 Foo 的信息启动自己,并且包含 Bob 信息的 instanceA 应该自己完成。
【解决方案2】:

android:launchMode="singleInstance" 用于活动,而不用于应用程序/进程。它不保留第一个实例。它确保只有一个实例。仔细阅读docs

如果你想杀死你的活动,你应该打电话给finish()

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多