Android中的onNewIntent()牛刀小试

  以前只是简单的了解一下Android的四种启动模式,而且有三个都在说onNewIntent这个函数,那么这个函数干什么的,到底怎么用呢?

今天在公司需要做一个登出和直接跳过登录界面来来直接关闭程序。由于在程序的登录选择界面和主界面我的启动模式是singleTask的,所以要想直接关闭程序退出整个应用的根本退不了,相信大家看了http://blog.csdn.net/yanglei0917/article/details/52461382,四种启动模式的文章后会发现singTask会把目标activity复用直接放到栈顶,所以我的整个程序就是用大家最常用的在application中添加集合清除所有activity和system.exit(0),这两种方法都没办法实现,所以这时候想到了onNewIntent这个函数。

我的设想多activity中退出整个程序,例如按打开先后顺序从A->B(B在栈顶),这时我需要从B直接退出程序,并且AB的启动面模式都是singleTask的。

我的想法就是如何让B打开A,然后让A在关闭finish掉就可以直接退出当前的应用了。而正好我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在B窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,再次开启A时将会清除该进程空间的所有Activity。

B中实现的代码为:

             Intent intent = new Intent();   
                    intent.setClass(B.this, A.class);  
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置  
                    startActivity(intent);  //注意,startActivity是异步执行,换句话说,startActivity是立即返回的,是不会阻塞的,因此下面的finish得意执行
                    finish();//关掉自己 
然后在A中使用onNewIntent,代码如下:

    @Override
    protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {  
            finish();  
     }  
    }


这样就轻松地完成了整个应用程序的退出。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值