大家好:当我安装程序完成时,不退出安装界面,直接点击"完成"启动应用程序,然后按HOME键回到桌面,然后再点击启动图标,这个时候程序会重新启动,这样我的程序就有两个实例在运行。
如果完成安装后,回到桌面,然后按启动图标,启动程序后,再回到桌面,按启动图标,这个时候就直接把我的程序切到前台,而不会再次启动一个进程实例。
我已经在我的AndroidManifest.xml文件中,为启动的第一个界面Activity,设置了属性:android:launchMode="singleTop"
请问,该问题如何解决?
如果完成安装后,回到桌面,然后按启动图标,启动程序后,再回到桌面,按启动图标,这个时候就直接把我的程序切到前台,而不会再次启动一个进程实例。
我已经在我的AndroidManifest.xml文件中,为启动的第一个界面Activity,设置了属性:android:launchMode="singleTop"
请问,该问题如何解决?
解决方案 »
- android camera开发Method called after release()问题
- 短消息监听 BroadcastReceiver实现 与 Service实现
- android 获取GSM模式或wcdma模式
- 尼玛 Android 版本自动更新 自动安装 签名 权限 现将经验分享
- LBS应用疑惑,
- ant 打包apk怎么改变apk生成的位置
- android bringchildtofront问题
- 分享一个chrome插件,轻松上Google
- 使用@dimen后GridView不显示
- 请问各位大神这个问题怎么解决
- 如何改变spinner弹出窗体的大小
- android如何加入文字跟图片?
没遇见过点击“完成”程序还会启动的。 不过,你可以尝试这个方法: 每个程序的启动都会有一个Activity被创建,那么,从Activity的启动到消失,中间总共有七个流程:
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState); protected void onStart();
protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();
} So,当每次你点击了Home或者返回按钮时,Activity都会执行onStop方法。 这时, 你可以在onStop方法内加上一句代码让你的程序直接关闭,那么,每次你再启动你的程序的时候 就不会是两个了: 你可以加上: this.finish(); —— 关闭当前的Activity 或者: System.exit(0); —— 关闭当前应用程序(实际上此方法在Android中起不到真正的关闭程序,但同样可以关闭当前的程序界面,具体原因没有研究过)
/**
* 继承Activity类
*
* 并重写父类(Activity)的方法: onCreate() and onStop()
*
* 还有其他的五个方法,如果你需要的话,可以自己测试下它们的用途
*
*/
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 程序在第一次启动的时候会执行这里
}
@Override
protected void onStop() {
super.onStop();
// 每次当你的Activity被隐藏或者被关闭时,程序都会执行这里,So,你可以在这里加上你要关闭程序的代码
this.finish();
// Or
// System.exit(0);
}
}
那也不可能是一个程序两个实例在运行啊 你在onCreate方法中打印一句话,看看这个方法被调用了几次。 如果是一次的话,那就证明该程序只运行了一个实例。
SINGLE TASK
If a task is already running for the activity you are now starting, that task is brought to the foreground with its last state restoredSINGLE TOP
If the activity being started is the current activity (at the top of the back stack), then the existing instance receives a call to onNewIntent(), instead of creating a new instance of the activity.
尝试把第一个Activity设置为singTask,这时倒是实现了不启动两次,但带来更大BUG:
正常操作时,在有Activity堆栈的情况下,再次从桌面启动,显示的是第一个ACTIVITY,他上面的act被销毁了,明显是不能满足需求。
目前发现可能的原因:
从安装后启动(长按home相同)时,信息如下:
11-25 14:10:59.103: INFO/ActivityManager(1189): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.***}
而从桌面启动时:
11-25 14:14:40.837: INFO/ActivityManager(1189): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.*** bnds=[362,398][478,545] }
多了catgery和binds。
莫非是因为这点差异导致系统识别task发生误判?还希望大家多讨论啊
实际上第二次启动只是UI启动了,内部数据没变,在启动时做个判断,如果不是唯一,就关掉当前的。
private static int OnlyOne = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Log.e("OnlyOne0", ""+OnlyOne);
if(OnlyOne != -1){
finish();
return;
}
setContentView(R.layout.main1);
OnlyOne = 1;