Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
快捷方式在Android中启动不正确的活动_Android_Android Activity - Fatal编程技术网

快捷方式在Android中启动不正确的活动

快捷方式在Android中启动不正确的活动,android,android-activity,Android,Android Activity,我在我的申请中遇到了一个由两个主要活动组成的问题。最小(非)工作示例是ActivityA,它在onCreate方法中为ActivityB创建快捷方式 当从主屏幕启动ActivityB快捷方式时,ActivityB将启动,之后ActivityA将意外地全部启动!但是,只有当ActivityA未被销毁时,才会发生这种情况。如果您以某种方式破坏了活动(内存清理应用程序或类似的东西),则不会调用它 我相信我在申请中犯了严重的错误 这是活动A package com.example.test; impo

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

当从主屏幕启动ActivityB快捷方式时,ActivityB将启动,之后ActivityA将意外地全部启动!但是,只有当ActivityA未被销毁时,才会发生这种情况。如果您以某种方式破坏了活动(内存清理应用程序或类似的东西),则不会调用它

我相信我在申请中犯了严重的错误

这是活动A

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);
    }
}
这是活动B

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>


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

我使用第二个活动的原因是,因为我希望第二个活动在点击快捷方式后执行简单的后台操作-没有比我示例中的toast复杂多少。是否有任何理由不使用两个主要活动?我是说,我认为这是完全正确的。在最初的应用程序中,我不是在onCreate中创建快捷方式,而是在按下一个按钮后,我只是简化了应用程序。此外,我不知道AsyncTask是如何应用的。