怎样在程序中设置Android应用最开始运行的Activity
从一个Activity(界面)跳转到另一个Activity时,需要使用到Intent来启动Activity。Intent在android中的定义为:public Intent (Context packageContext , Class cls);在Intent使用时,分为显式调用和隐式调用:显式调用---直接调用Activity的Class类例,Activity1调用Activity2Intent intent = new Intent(this , Activity2.class);startActivity(intent);隐式调用---通过调用另一个Activity的action 来启动另一个ActivityActivity1隐式调用Activity2时需要在AndroidManifest.xml文件中配置Activity2的action和category,具体添加下面的代码到Activity2的定义中接着同样用intent来启动Activity,代码如下:Intent intent = new Intent("myaction2");startActivity(intent);这样就可以启动Activity2注:intent隐式调用Activity时会遇到多个Activity的intent-filter中的action和category相同时,android会先弹一个选择界面的窗口,显式要启动的Activity列表,根据用户选择来启动Activity,如Activity2和Activity3的action和category相同启动Activity代码如下:Intent intent = new("action2");intent.addCategory("myCategory");startActivity(intent);这时就会弹出Acvity的选择窗口,选择启动activity2还是activity3
【Android开发】请问如何结束后台指定的Activity ??
如果只是A-->B-->C的话,用一楼的方法确实没问题,相当于添加一个特殊的按钮事件,按钮事件的处理内容是:结束B和C,C可以直接finish,至于B可以用setResult方法告诉B也要finish。如果是
A-->B-->.........-->C的话可能要多次处理setResult和onActivityResult方法,此时可以在按钮事件中启动A,只不过要在启动的时候为intent添加一个参数intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这样就会结束B和C返回A,因为这些操作是在按钮的事件中进行的所以按返回键的固有操作是不影响的。
android 怎么用Intent.setFlag 清除以前的activity
android intent中设置如下flag,可以清除栈顶的activity:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
还有其他tag如下:
1.FLAG_ACTIVITY_CLEAR_TOP:跳转到的activity若已在栈中存在,则将其上的activity都销掉。
2.FLAG_ACTIVITY_NEW_TASK:activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新起一个栈装入启动的activity。简而言之,跳转到的activity根据情况,可能压在一个新建的栈中。
3.FLAG_ACTIVITY_NO_HISTORY:跳转到的activity不压在栈中。
4.FLAG_ACTIVITY_SINGLE_TOP:和Activity的Launch mode的singleTop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。简而言之,目标activity已在栈顶则跳转过去,不在栈顶则在栈顶新建activity。
Android中怎么切换task到前台
如果你的平台是面向Android3.0(API level 11),那么恭喜你,一个函数就可以搞定: moveTaskToFront http://developer.android.com/reference/android/app/ActivityManager.html#moveTaskToFront(int, int) 如果你和我一样苦逼的在用2.2的平台,那么就要稍微麻烦点了,基本上是用taskAffinity + FLAG_ACTIVITY_NEW_TASK + FLAG_ACTIVITY_SINGLE_TOP。 先来看一下sdk怎么说的: 1. taskAffinity: SDK说,如果用带FLAG_ACTIVITY_NEW_TASK标志来启动一个activity,并且这个activity与当前运行的另一个task(A)的affinity名字相同,那么就这个activity就会在那个task(A)里启动。 Ok,到这还不行,人家没说会把Task_A带到前台,接着看另一个Flag 2. FLAG_ACTIVITY_NEW_TASK 好了,重点来了:如果Task_A中已经有了Activity_2,这时候如果以FLAG_ACTIVITY_NEW_TASK来start Activity_2,那么这个Task_A就会被带到前台。 好了,现在Task_A已经可以到前台了,剩下最后一步:Activity_2不能创建两次,这就要求同时使用下面这个flag: 3. FLAG_ACTIVITY_SINGLE_TOP 如果Activity_2在Task的顶端,那么这个Activity_2就不会被再此创建,而是走onNewIntent. 至此,结合上面3个特性,问题得以解决。结合代码,流程如下: 1. 在androdiManifest.xml中添加Activity_2的taskAffinity name与Task_A相同(也就是与Activity_1的taskAffinity名字相同),如android:taskAffinity = "android.task.calendar"。 2. 在Task_B启动前,Activity_1先启动Activity_2并要求返回结果,startActivityForResult(). 3. Task_B中的Activity_4取得所需数据后,保存好(intent,或其他方法),然后startActivity(Activity_2),并带上(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP)标志。 4. Task_A被带到前台,并且调用到Activity_2::onNewIntent(). 5. Activity_2取得之前保存的信息(从Intent或其他地方),调用setResult(),然后finish(). 6. Activity_1中的onActivityResult()响应,得到返回结果。