当一个新的activity启动时不会调用以下哪个方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当一个新的activity启动时不会调用以下哪个方法相关的知识,希望对你有一定的参考价值。

参考技术A 不会调用goToActivity 参考技术B android任务栈:我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,一个任务栈包含了一个activity的集合。android通过ActivityRecord、TaskRecord、ActivityStack、ActivityStackSupervisor,ProcessRecord有序地管理每个activity。

一:Standard 标准模式

这是android的默认启动方式,即使不在AndroidManifest.xml里面设置launchMode,也是默认的这个模式。每次启动一个A activity都会创建一个A activity的实例入栈,无论A activity是否存在。
生命周期:onCreate;onStart;onResume都会被调用。
举个例子:任务栈中有A、B、C三个activity,此时C处于栈顶,C的启动模式为Standard。若C跳转到 C;结果还会有一个C activity进入栈中,成为栈顶。

二:SingleTop栈顶复用模式

此模式分为2中情况:(1)如果需要创建的activity已经位于栈顶,此时直接复用该栈顶activity,不再创建新的activity;(2)如果要创建的activity不处于栈顶,此时才会创建一个新的activity入栈,同Standard一样。
生命周期:第一种情况:onCreate 、onStart不会被系统调用,因为他没有什么改变,但是onNewIntent会被调用(activity被正常创建的时候不会调用这个方法);第二种情况同Standard模式。
举个栗子:activity栈中有三个activity,分别是A、B、C。C处于栈顶,且为SingleTop模式。(1)情况1,C中加入点击事件,跳转到C中,此时的结果是复用栈顶的C。(2)情况2,C中加入点击事件跳转到A。结果是创建一个新的A 入栈,A成为栈顶。

三:SingleTask栈内复用模式

说明:如果创建的A activity已经处于栈中,此时不会创建新的Activity,而是会将A activity上面的其他activity摧毁,使得A成为栈顶。
生命周期:同SingleTop模式一样,只会回调一次onNewIntent方法。
举个栗子:此时有A、B、C三个activity,C位于栈顶,启动模式为SingleTask。(1)情况一,C中加入点击事件,跳转到C,此时直接复用栈顶的C Activity。(2)情况二,C跳到A ,会将A之上的所有activity销毁,使A成为 栈顶。

四:SingleInstance单实例模式

说明:全局单例模式,加强版的SingleTask模式。具有所有SingleTask的特性,除此之外,改模式的activity仅仅能单独位于一个任务栈中,这个经常应用于系统的应用中,如,锁屏,Launch等等,整个系统中仅仅有一个。
参考技术C 对Android而言,Activity有四种启动模式,它们是:

1. standard 标准模式也是默认模式,每次都新建一个实例对象。

2. singleTop 如果在任务栈顶发现了相同的实例则重用,否则新建并压入栈顶。

3、singleTask 如果在任务栈中发现了相同的实例,将其上面的任务终止并移除,重用该实例。否则新建实例并入栈。

4、singleInstance 允许不同应用,进程、线程等共用一个实例,无论从何应用调用该实例都重用。
参考技术D 当一个新的activity启动时不会调用goToActivity方法

为什么Intent在调用Activity时没有重定向?

我有ListView包含两个TextViews(比如说t1,t2),而ListView是由xml创建的,它在Activity中膨胀。 我的要求是,如果用户单击一个ListView项,其中包含一个新的Activity应该和当点击一个项目时,其中包含t2启动另一个Activity。 但问题是,当我点击任何ListView项目时它不起作用,它在两种情况下都移动到相同的Activity。

我的代码(作为 - 里面的getView()方法):

mylayout.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                try {
                    if (listType == 1) {
                        Log.v("active", "On Click " + (position));
                        Intent intent = new Intent(VoucherActiveScreen.this,MyVoucherDetailPage.class);
                        intent.putExtra("selectedIndex", position);
                        intent.putExtra("listType", listType);
                        startActivity(intent);
                    }
                    else if (listType == 3) {
                                 //String str = offerPrice.getText().toString();
                                 //System.out.println(str);
                                 if (voucherOffer.getIs_redeem().toString().equals("1"))
                                 {
                                    System.out.println(voucherOffer.getIs_redeem().toString()+"if Rate"); //its working when click listview which contains Rate

                                    Intent  intratedeal=new Intent(getBaseContext(),RateDeal.class);
                                    intratedeal.setClass(getBaseContext(), RateDeal.class);
                                    startActivityForResult(intratedeal, 1);
                                 }
                                 else
                                     {
                                     System.out.println(voucherOffer.getIs_redeem().toString()+"else View"); //its working when click listview which contains View
                                     Intent  intratevendor=new Intent(getBaseContext(),RateVendor.class);
                                     //intratevendor.setClass(getBaseContext(), RateVendor.class);
                                        startActivityForResult(intratevendor, 1);
                                     }
                             /*Intent intent = new Intent(
                                        VoucherActiveScreen.this,
                                        MyVoucherDetailPage.class);
                                intent.putExtra("listType", listType);
                                intent.putExtra("selectedIndex", position);*/
                                Log.v("inactiveeeeeeeeeeeeeeeeee", "On Click " + (position));

                                //startActivity(intent); 

                    }
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        });

请任何一个帮助...控制是正确的if-else阻止但意图不重定向相同的活动

答案

你可以在你的意图中setFlags,如下所示:

Intent intent = new Intent(VoucherActiveScreen.this,MyVoucherDetailPage.class);
intent.putExtra("selectedIndex", position);
intent.putExtra("listType", listType);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

上面的代码段将启动一项新的活动任务。看到这个链接:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

以上是关于当一个新的activity启动时不会调用以下哪个方法的主要内容,如果未能解决你的问题,请参考以下文章

Android中判断当前处于哪个Activity

无法从 onBackgroundMessage 启动 Activity

启动新活动 Android 时出错

为什么Intent在调用Activity时没有重定向?

Android组件体系之Activity启动模式解析

Activity启动模式