快捷方式在Android中启动了错误的活动

时间:2014-04-01 22:58:06

标签: android android-activity

我在申请中遇到了两个主要活动的问题。最小(非)工作示例是ActivityA,它在onCreate方法中为ActivityB创建快捷方式。

当从主屏幕启动ActivityB快捷方式时,ActivityB将启动,之后ActivityA也会启动 - 完全出乎意料!但是,这仅在ActivityA未被销毁时才会发生。如果你以某种方式销毁活动(内存清理应用程序或类似的东西)而不是它没有被调用。

我相信我在申请中做了一些非常错误的事情。

这是ActivityA

package com.example.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class ActivityA extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent shortcutintent = new Intent();
        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut");
        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, R.drawable.ic_launcher);
        shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext(), ShortcutActivity.class));
        shortcutintent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        sendBroadcast(shortcutintent);
    }
}

这是ActivityB

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class ActivityB extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Toast.makeText(this, "Hey, I just started activity!", Toast.LENGTH_SHORT).show();
        finish();
    }
}

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.test.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.test.ShortcutActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>

1 个答案:

答案 0 :(得分:0)

不要将android.intent.action.MAIN用于清单中的多个活动。如果您希望应用程序在首次启动后执行不同的操作,我建议您保存shared preference。如果首选项不存在,请继续创建快捷方式。如果存在,请继续执行其他代码。另外,您不应在finish()中致电onCreate()。如果要执行任务,为什么不创建另一个函数或AsyncTask?无需启动并删除整个Activity