19

设想 :

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

情况1:

如果我再次单击图标打开我的应用程序,该应用程序将从第一个活动重新启动。

案例二:

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

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

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

编辑:

此处已问过此问题:通过启动器中的图标按下启动时,应用程序完全重新启动

但没有答案:(

4

5 回答 5

23

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

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

谢谢 :)

于 2013-07-09T11:18:08.810 回答
6

将此添加到您的启动器活动中:

if (!isTaskRoot()) {
    finish();
    return; 
}
super.onCreate(savedInstanceState);
于 2015-10-21T13:38:01.570 回答
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 类中启动您的活动(该类实现可运行并在运行方法中调用启动活动)。

它将显示您的启动屏幕 2 秒钟并开始另一个活动。

于 2013-07-09T11:10:23.640 回答
0

在 AndroidManifest 中,您似乎保留了启动活动android:launchMode="singleTask"。从您的启动活动中删除这个将解决问题

于 2020-09-26T14:26:45.313 回答
-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();
}
}
于 2013-07-09T10:44:39.370 回答