黑马程序员技术交流社区

标题: [深圳特色][问答网]让service可以获得任意当前显示的Activity? [打印本页]

作者: 深圳黑马程序员    时间: 2015-12-17 19:06
标题: [深圳特色][问答网]让service可以获得任意当前显示的Activity?
Service如何获得当前显示的Activity对象呢?这是一个面试官喜欢问的问题。下面由深圳问答网的技术指导老师来看看关于这个问题的回答吧:


  

学生问题:
怎么样可以让service可以获得任意当前显示的Activity的对象?老师回答:
在Application中维护一个stack,用来存储Activity,Stack是一种后进先出的数据结构,存放了一系列对方的栈。用户可以对栈执行pop和push操作,哪怕是null对象也行,而且stack没有大小的显示。
把每次启动的Activity 放入stack中。当想要对Activity进行操作的时候,可以从中取出想要的Activity进行操作,比如想退出时关闭所有Activity,遍历finish即可。当前显示的Activity对象拿到最后一个Activity就是了。
  1. package com.example.test;  

  2. import java.util.HashMap;  
  3. import java.util.Iterator;  
  4. import java.util.Map;  
  5. import java.util.Stack;  
  6.    
  7. import android.app.Activity;  
  8.    
  9. public class StackManager {  
  10.     //栈管理器 StackManager实例  
  11.     private static StackManager instance;  
  12.     //Stack 是一种后进先出的数据结构(LIFO),存放了一系列对象的栈。用户可以对栈执行pop和push操作,哪怕是null对象也行,而且Stack没有大小的显示  
  13.     Stack<Activity> activityStack = new Stack<Activity>();  
  14.     Map<String, Activity> mapStack = new HashMap<String, Activity>();  
  15.    
  16.     /**
  17.      * 单例模式 获取实例
  18.      * @return
  19.      */  
  20.     public synchronized static StackManager getInstance() {  
  21.         if (instance == null)  
  22.             instance = new StackManager();  
  23.         return instance;  
  24.     }  
  25.    
  26.     /**
  27.      * 向Stack中添加Activity 为设置退出准备
  28.      *  
  29.      * @param activity
  30.      */  
  31.     public void pushToStack(Activity activity) {  
  32.         if (activity != null)  
  33.             activityStack.add(activity);  
  34.     }  
  35.    
  36.     /**
  37.      * 清空栈中所有的Activity  
  38.      */  
  39.     public void popAllForExit() {  
  40.         for (Activity e : activityStack)  
  41.             e.finish();  
  42.         activityStack.clear();  
  43.     }  
  44.    
  45.     /**
  46.      * 向Stack里添加Activity,为导航区做准备
  47.      *  
  48.      * @param key
  49.      * @param activity
  50.      */  
  51.     public void pushToMapStack(String key, Activity activity) {  
  52.         if (!mapStack.containsKey(key))  
  53.             mapStack.put(key, activity);  
  54.     }  
  55.    
  56.     public void popAllForStartActivity(String key) {  
  57.         Iterator<String> iterator = mapStack.keySet().iterator();  
  58.         while (iterator.hasNext()) {  
  59.             String k = iterator.next();  
  60.             if (!k.equals(key)) {  
  61.                 mapStack.get(k).finish();  
  62.                 mapStack.remove(k);  
  63.                 iterator = mapStack.keySet().iterator();  
  64.             }  
  65.         }  
  66.     }  
  67. }
复制代码


[深圳特色] 揭秘内部问答网中经典问题,每周更新!
深圳校区除了全国独有问答网,就业老师面试服务,还有更多神秘惊喜等着你,咨询热线:0755-66689855



作者: cj286    时间: 2015-12-25 08:40
厉害




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2