1

次のコードを使用してホームショートカットを作成しています。新しいインスタンスではなく、アプリの同じ開いたインスタンス(存在する場合)を起動したいと思います。

    public void createShortcut() {

    if (app.prefs.getBoolean("prefs_ShortcutCreated", false) == false) {
        Intent shortcutIntent = new Intent();
        shortcutIntent.setClassName(this, this.getClass().getName());

        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

        Intent addIntent = new Intent();
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "test");
        addIntent.putExtra("duplicate", false);
        File image = new File(app.DEFAULT_APP_FOLDER_MAIN, "icon.png");
        AssetManager assets = app.getApplicationContext().getResources().getAssets();
        try {
            copy(assets.open("icon.png"), image);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Bitmap theBitmap = BitmapFactory.decodeFile(app.DEFAULT_APP_FOLDER_MAIN + "icon.png");
        Bitmap scaledBitmap = Bitmap.createScaledBitmap(theBitmap, 128, 128, true);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, scaledBitmap);

        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        sendBroadcast(addIntent);

        theBitmap.recycle();
        scaledBitmap.recycle();

        Editor editor = app.prefs.edit();
        editor.putBoolean("prefs_ShortcutCreated", true);
        editor.commit();
    }

}
4

1 に答える 1

1

Androidフレームワークは、事前定義されたアクティビティライフサイクルに従ってアクティビティを破棄して再作成します。アクティビティがユーザーに表示されない場合、そのアクティビティはおそらく破棄されており、確実に「一時停止」されています。ただし、インスタンス間で維持したいアクティビティのインスタンスについて何かがある場合は、メソッドのオーバーライドonCreateを介してアクティビティに配信されるバンドルにそれらのアーティファクトを配置できます。onSaveInstanceStateこれにより、アクティビティを残された状態と同じ状態で再作成できます。たとえば、再作成中にユーザー入力を忘れずに、部分的に入力されたフォームを復元できます。「バックスタック」は、私が100%ではない別のメカニズムを採用している可能性があります。

于 2012-05-22T12:23:38.067 に答える