3

アプリケーションに奇妙なエラーがあります。OSから直接アプリケーションを起動し、タスクキラーを介してバックグラウンドからアプリケーションを強制終了すると、アプリがクラッシュします(クラッシュを気にしないでください。理由は大まかにわかります-クラスローダー)。これは、クラッシュを再現する数少ない方法の1つです。一貫して->OSのシミュレーションでメモリを解放し、アプリケーションを閉じます)、再起動してみてください。

次のコマンドを使用してadbシェルを介してアプリケーションを起動すると、問題が発生します。

adb shell am start -a android.intent.action.MAIN -n com.my.packagename/myLaunchActivity

クラッシュを再現できません。

それで、上記の呼び出しとは対照的に、Android OSがアプリケーションを呼び出す方法に違いはありますか?

編集:マニフェストを追加しました(名前を変更しただけです)

<?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>

adbシェルからcom.my2.Launcherを起動します

4

1 に答える 1

1

最初に確認できるのは、ランチャーアイコンからアプリを起動した場合、インテントにはカテゴリ「android.intent.category.LAUNCHER」が含まれていますが、それを使用する場合は含まれadb shell amていません。

また、ランチャーアイコンを使用して起動すると、インテントフラグFLAG_ACTIVITY_RESET_TASK_IF_NEEDED(0x200000)が設定されます(設定されてadb shellいない場合)。

そのいずれかがクラッシュの動作に違いをもたらすかどうかはわかりませんが、それは質問に答えます。

于 2012-07-11T09:23:05.177 に答える