Service如何获得当前显示的Activity对象呢?这是一个面试官喜欢问的问题。下面由深圳问答网的技术指导老师来看看关于这个问题的回答吧:
学生问题:
怎么样可以让service可以获得任意当前显示的Activity的对象?老师回答:
在Application中维护一个stack,用来存储Activity,Stack是一种后进先出的数据结构,存放了一系列对方的栈。用户可以对栈执行pop和push操作,哪怕是null对象也行,而且stack没有大小的显示。 把每次启动的Activity 放入stack中。当想要对Activity进行操作的时候,可以从中取出想要的Activity进行操作,比如想退出时关闭所有Activity,遍历finish即可。当前显示的Activity对象拿到最后一个Activity就是了。 - package com.example.test;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Stack;
-
- import android.app.Activity;
-
- public class StackManager {
- //栈管理器 StackManager实例
- private static StackManager instance;
- //Stack 是一种后进先出的数据结构(LIFO),存放了一系列对象的栈。用户可以对栈执行pop和push操作,哪怕是null对象也行,而且Stack没有大小的显示
- Stack<Activity> activityStack = new Stack<Activity>();
- Map<String, Activity> mapStack = new HashMap<String, Activity>();
-
- /**
- * 单例模式 获取实例
- * @return
- */
- public synchronized static StackManager getInstance() {
- if (instance == null)
- instance = new StackManager();
- return instance;
- }
-
- /**
- * 向Stack中添加Activity 为设置退出准备
- *
- * @param activity
- */
- public void pushToStack(Activity activity) {
- if (activity != null)
- activityStack.add(activity);
- }
-
- /**
- * 清空栈中所有的Activity
- */
- public void popAllForExit() {
- for (Activity e : activityStack)
- e.finish();
- activityStack.clear();
- }
-
- /**
- * 向Stack里添加Activity,为导航区做准备
- *
- * @param key
- * @param activity
- */
- public void pushToMapStack(String key, Activity activity) {
- if (!mapStack.containsKey(key))
- mapStack.put(key, activity);
- }
-
- public void popAllForStartActivity(String key) {
- Iterator<String> iterator = mapStack.keySet().iterator();
- while (iterator.hasNext()) {
- String k = iterator.next();
- if (!k.equals(key)) {
- mapStack.get(k).finish();
- mapStack.remove(k);
- iterator = mapStack.keySet().iterator();
- }
- }
- }
- }
复制代码
深圳校区除了全国独有问答网,就业老师面试服务,还有更多神秘惊喜等着你,咨询热线:0755-66689855
|