Android:启动相同的实例

时间:2012-05-22 11:49:45

标签: android

我正在使用以下代码创建Home快捷方式: 我想获得启动的应用程序的相同打开实例(如果存在),而不是新实例。

    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();
    }

}

1 个答案:

答案 0 :(得分:1)

Android Framework会在预定义的Activity生命周期之后销毁并重新创建活动。当一个活动对用户不可见时,它很可能已被破坏,并且肯定已经“暂停”。但是,如果您希望跨实例维护活动的实例,则可以通过onCreate方法覆盖将这些文物放置到活动的onSaveInstanceState中。这允许在与其保持相同的状态下重新创建活动,例如,恢复部分填充的表单,而不是在重新创建期间忘记用户输入。 “后堆栈”可能采用了一种我不是百分之百的不同机制。