当一个新的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启动时不会调用以下哪个方法的主要内容,如果未能解决你的问题,请参考以下文章