我在申请中遇到了两个主要活动的问题。最小(非)工作示例是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>
答案 0 :(得分:0)
不要将android.intent.action.MAIN
用于清单中的多个活动。如果您希望应用程序在首次启动后执行不同的操作,我建议您保存shared preference。如果首选项不存在,请继续创建快捷方式。如果存在,请继续执行其他代码。另外,您不应在finish()
中致电onCreate()
。如果要执行任务,为什么不创建另一个函数或AsyncTask
?无需启动并删除整个Activity
。