有三个Activity,SplashActivity,LoginActivity,MainActivity.程序打开后自动启动SplashActivity,2秒后自动结束当前Activity进入LoginActivity,在之后登录成功则转入MainActivity并结束当前Activity(失败则提示错误信息),在MainActivity按下后退键时结束MainActivity。现在在SplashActivity通过重写onTouchEvent,让用户触摸屏幕时直接关闭(通过Handler发送消息)此页面跳转到登录,登录到MainActivity后按下后退键时,会转到LoginActivity,也就是说之前LoginActivity没有被finish或者说在MainActivity中又重新启动了一个LoginActivity。SplashActivity代码如下:
/**
 * cn.ciee.f4.orchard--SplashActivyty.java
 * 2013--2013-4-30--下午10:12:13
 * @author wangyun 
 * 2013年本科毕业设计
 * 
 */
package cn.ciee.f4.orchard.Activity;import com.ciee.f4.orchard.R;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;/**
 * @author wangyun
 * 此类为启动页面
 */
public class SplashActivity extends Activity {
public final static int CLOSE_ACTIVITY=1001;
public final static int TOUCH_DOWN=1002;//1002;

Handler mHandler=new Handler(){
@Override
public void handleMessage(android.os.Message msg){
switch (msg.what) {
case SplashActivity.CLOSE_ACTIVITY:
leadToLogin();
break;
case SplashActivity.TOUCH_DOWN:
mHandler.removeMessages(TOUCH_DOWN);
leadToLogin();
break;
default:
break;
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
setTitle("欢迎使用果园信息采集系统");
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mHandler.sendEmptyMessage(SplashActivity.CLOSE_ACTIVITY);
}
}, 2000);//两秒后自动关闭欢迎页
}


@Override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction()==MotionEvent.ACTION_DOWN){//用户触摸了屏幕
// mHandler.sendEmptyMessage(SplashActivity.TOUCH_DOWN);//此处代码有问题,退出时无法结束LoginActivity.
return true;
}
return false;
}

private void leadToLogin(){
Intent intentLogin= new Intent(SplashActivity.this,
LoginActivity.class);
//intentLogin.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);//LoginActivity不添加到后退栈
startActivity(intentLogin);
SplashActivity.this.finish();
}
}
Javahandler

解决方案 »

  1.   

    该怎么解决这个问题(用户在SplashActivity触摸屏幕后,之后出现在MainActivity按回退键,跳转到LoginActivity的情形;如果在SplashActivity用户等该页面两秒后自动跳转,则不会出现该问题)。
      

  2.   

    你的问题是关闭应用的时候,不会把所有的activity(loginAcitvity)都关掉而导致的出错吗?
    是的话http://www.cnblogs.com/qingblog/archive/2012/06/08/2541790.html
    这篇文章会帮到你
      

  3.   

    没有touch, leadToLogin执行了一次。
    touch, leadToLogin()执行了两次。
      

  4.   

    在启动MainActivity前,intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)。
      

  5.   

    都用handler发消息吧,在handler发消息前,先remove消息,leadToLogin好像执行了两次
      

  6.   


    case SplashActivity.TOUCH_DOWN:
         mHandler.removeMessages(TOUCH_DOWN);
         leadToLogin();
    break;不明白加上mHandler.removeMessages(TOUCH_DOWN);是想做什么,如果是想在触摸屏幕后关闭“两秒后自动关闭欢迎页”的消息发送,那这块就有问题了。