Android 从操作系统启动应用程序与从adb启动应用程序之间是否存在差异

Android 从操作系统启动应用程序与从adb启动应用程序之间是否存在差异,android,android-intent,Android,Android Intent,我的申请中确实有一个奇怪的错误。 当我直接从操作系统启动应用程序,然后通过任何任务杀手从后台杀死它时,我的应用程序崩溃(不介意崩溃,我大致知道原因-classloader)(这是持续复制崩溃的少数方法之一->模拟操作系统释放内存并关闭应用程序),然后再次尝试重新启动它 问题是,如果我使用以下命令通过adb shell启动应用程序: adb shell am start -a android.intent.action.MAIN -n com.my.packagename/myLaunchActi

我的申请中确实有一个奇怪的错误。 当我直接从操作系统启动应用程序,然后通过任何任务杀手从后台杀死它时,我的应用程序崩溃(不介意崩溃,我大致知道原因-classloader)(这是持续复制崩溃的少数方法之一->模拟操作系统释放内存并关闭应用程序),然后再次尝试重新启动它

问题是,如果我使用以下命令通过adb shell启动应用程序:

adb shell am start -a android.intent.action.MAIN -n com.my.packagename/myLaunchActivity
我无法再现这次崩溃

那么Android操作系统调用应用程序的方式与上面的调用有什么不同吗

编辑:添加了清单(只是更改了名称)



从adb shell启动com.my2.Launcher

我能看到的第一件事是,如果从启动器图标启动应用程序,意图包括类别“android.Intent.CATEGORY.Launcher”,而使用adb shell am则不包括

此外,当您通过启动器图标启动时,如果需要,将设置意图标志
标志活动重置任务(0x200000),但在
adb外壳
的情况下则不设置


不确定这些是否会对您的崩溃行为产生影响,但它回答了这个问题。

您如何“从操作系统”重新启动它?您使用的是启动器图标还是最近的任务?后者不一定会在新流程中调用launcher活动,但可以直接转到任务堆栈顶部的任何内容,因此可以使您进入完全有效但未处理的状态。目前主要使用图标,只是尝试使用最近的任务,两者都会导致相同的崩溃。目前正在调查任务堆栈,但普遍感到好奇,因为正如我所说的,我无法通过adb手动启动intent时再现崩溃。非常感谢,这帮了大忙,它与我的崩溃没有直接关联,但让我找到了罪魁祸首->使用SDK 2.1嘿嘿。是的。这是我最喜欢的安卓bug。再看看那个是我的;-)然而,这个问题在4.0中仍然存在,所以它还没有被修复。这不仅仅是2.1中的问题
<?xml version="1.0" ?>
<manifest android:versionCode="5" android:versionName="1.05" package="com.my.sample" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="7"/>
<application android:icon="@drawable/square_my_logo" android:label="@string/app_name">
    <activity android:label="@string/app_name" android:name="com.my.InfoActivity" android:screenOrientation="landscape"></activity>

    <activity android:label="@string/app_name" android:name="com.my2.KickStart" android:screenOrientation="landscape"/>

    <activity android:label="@string/app_name" android:name="com.my2.Launcher" android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/></manifest>