点击应用程序图标打开Android应用程序时重启

21

情景:

我通过点击图标打开我的应用程序,做一些事情,浏览活动,通过单击主页按钮暂停应用程序。

情况1:

如果我再次通过点击图标打开应用,则应用程序从第一个活动重新启动。

情况2:

如果我从最近的打开应用程序中打开我的应用程序(在4.0中通过按菜单按钮并选择我的应用程序),则它从暂停状态开始。

我希望情况2总是发生,不希望我的应用程序每次通过单击图标打开时都重新启动。

我已经将我的清单文件与其他应用程序进行了比较,它们与我的相似,但行为不同(即像我想要的第二种情况)。

编辑:

这里有一个问题:App completely restarting when launched by icon press in launcher

但没有答案 :(


你在这里分享了你的第一个Activity代码,因为从中我们发现了问题所在。 - Mr.Sandy
这是一个启动画面活动,除了显示图像2秒钟并启动另一个活动外,不会执行任何操作。 - sanjeev
可能与清单文件有关。你能发布一下吗? - Naresh
如果您没有任何问题,请在此处发布闪屏活动代码... - Mr.Sandy
@user3422577,您的编辑被拒绝了,因为它听起来太像评论了,您应该在评论中发布。我会引用您的话:“这是第一次安装应用程序时使用的,如果您将应用程序关闭到后台,然后再次打开,行为将保持不变”。但我甚至不理解您的意思。似乎您并没有真正阅读问题。 - cregox
5个回答

25

我找到了问题所在。我在我的活动标志中设置了一个标志android:launchMode="singleTask",我删除了这个代码。

我还向我的代码中的所有活动添加了onsaveInstance方法,现在它可以工作了!

谢谢 :)


如果您的答案确实是解决方案,那么您应该接受自己的答案。 - cregox
3
你好,我有同样的问题;但我没有任何 launchMode 标志。你能否详细解释一下如何使用 onSaveInstanceState 函数来解决这个问题?(我想你是指 onSaveInstanceState) - ocramot
2
其实这并不是必需的。即使我已经删除了onsaveInstance代码,它仍然对我有效。 - sanjeev
在我的情况下,我在清单文件中为整个应用程序标签设置了它。 - Harsha
嗨,launchMode解决了我的问题。最近,我有一个webview。当我最小化应用程序并再次点击图标时,它会在某种程度上关闭。这个解决了这个问题。谢谢!! - Luki Centuri

6
将以下内容添加到您的启动器活动中:

if (!isTaskRoot()) {
    finish();
    return; 
}
super.onCreate(savedInstanceState);

2
这个没有任何作用。由于那个finish()调用,点击图标将不会有任何反应。 - philtz

0
在当前活动中设置一些需要显示2秒钟的图像,如下所示。
ImageView im = new ImageView(this);
im.setImageResource(set your image);
setContentView(im);
intentMainScreen = new Intent(getApplicationContext(), MainScreen.class);
Handler x = new Handler();
x.postDelayed(new splashhandler(), 2000);

然后在SplashHandler类中启动您的活动(该类实现了runnable并在run方法中调用start activity)。

它将显示您的闪屏屏幕2秒钟,然后启动另一个活动。


0

看起来在 AndroidManifest 中,您将启动活动保留为 android:launchMode="singleTask"。从启动活动中删除此内容将解决问题。


-1

尝试将您的闪屏活动代码替换为此代码。

public class Splash extends Activity {

protected boolean _active = true;
protected int _splashTime = 2000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.splash);

    Thread splashTread = new Thread() {
        @Override
        public void run() {
            try {
                int waited = 0;
                while (_active && (waited < _splashTime)) {
                    sleep(100);
                    if (_active) {
                        waited += 100;
                    }
                }
            } catch (InterruptedException e) {
                e.toString();
            } finally {
                Intent intent = new Intent(getApplicationContext(),
                        MainActivity.class);
                startActivity(intent);
                finish();
            }
        }
    };

    splashTread.start();
}

@Override
protected void onPause() {
    super.onPause();
}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
//      super.onBackPressed();
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接