场景:
我通过点击图标打开我的应用程序,执行操作,浏览活动,通过单击主页按钮暂停应用程序。
案例1:
如果我再次点击图标打开我的应用,应用会从第一个活动重新开始。
案例2:
如果我从最近打开的应用程序打开我的应用程序(在4.0中通过按菜单按钮并选择我的应用程序),它将从暂停状态开始。
我希望行为2始终发生,不希望我的应用每次打开时都会通过点击图标重新启动。
我将我的清单文件与其他应用程序进行了比较,它们与我的相似,但表现不同(即我想要的第二种情况)。
修改
这里有人问过:App completely restarting when launched by icon press in launcher
但没有答案:(
答案 0 :(得分:6)
我找到了。我在活动标记中设置了一个标记android:launchMode="singleTask"
。我删除了那段代码。
我还为我的代码中的所有活动添加了onsaveInstance
方法,现在它正在运行!
谢谢:)
答案 1 :(得分:4)
将此添加到您的启动器活动:
if (!isTaskRoot()) {
finish();
return;
}
super.onCreate(savedInstanceState);
答案 2 :(得分:0)
尝试使用此代码替换您的泼水活动代码..
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();
}
}
答案 3 :(得分: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类中启动您的活动(在run方法中实现runnable和call start活动)。
它将显示你的启动画面2秒并开始另一个活动。
答案 4 :(得分:0)
在AndroidManifest中似乎您保留了启动活动android:launchMode="singleTask"
。从您的启动活动中删除这一行即可解决问题