有三个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
/**
* 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
是的话http://www.cnblogs.com/qingblog/archive/2012/06/08/2541790.html
这篇文章会帮到你
touch, leadToLogin()执行了两次。
case SplashActivity.TOUCH_DOWN:
mHandler.removeMessages(TOUCH_DOWN);
leadToLogin();
break;不明白加上mHandler.removeMessages(TOUCH_DOWN);是想做什么,如果是想在触摸屏幕后关闭“两秒后自动关闭欢迎页”的消息发送,那这块就有问题了。