zoukankan      html  css  js  c++  java
  • moveTasktoBack 把当前任务放入后台

    http://blog.csdn.net/newcman/article/details/7801400

    [java] view plain copy
     
    1. 用Activity.moveTaskToBack()把当前任务放入后台,详细看注释:  
    [java] view plain copy
     
    1. /** 
    2.  * Move the task containing this activity to the back of the activity 
    3.  * stack.  The activity's order within the task is unchanged. 
    4.  * 把该activity所在的task移到栈底,顺序不变 
    5.  * @param nonRoot If false then this only works if the activity is the root 
    6.  *                of a task; if true it will work for any activity in 
    7.  *                a task. 
    8.  * nonRoot:false:当该activity是root activity才有用,true:所有的activity都有用 
    9.  * @return If the task was moved (or it was already at the 
    10.  *         back) true is returned, else false. 
    11.  */  
    12. public boolean moveTaskToBack(boolean nonRoot) {  
    13.     try {  
    14.         return ActivityManagerNative.getDefault().moveActivityTaskToBack(  
    15.                 <span style="color:#ff6666;">mToken</span>, nonRoot);  
    16.     } catch (RemoteException e) {  
    17.         // Empty  
    18.     }  
    19.     return false;  
    20. }  

    上边的mToken是IBinder类型,代表该Activity与ActivityManagerService进行IPC通信(进程间通信),直接看ActivityManagerService源码,如下

    [java] view plain copy
     
    1. /** 
    2.  * Moves an activity, and all of the other activities within the same task, to the bottom 
    3.  * of the history stack.  The activity's order within the task is unchanged. 
    4.  *  把该activity所在的task移到栈底,顺序不变 
    5.  * @param token A reference to the activity we wish to move 保存activity的引用 
    6.  * @param nonRoot If false then this only works if the activity is the root 
    7.  *                of a task; if true it will work for any activity in a task. 
    8.  * nonRoot:false:当该activity是root activity才有用,true:所有的activity都有用 
    9.  * @return Returns true if the move completed, false if not. 
    10.  */  
    11. public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) {  
    12.     synchronized(this) {  
    13.         final long origId = Binder.clearCallingIdentity();  
    14.         int taskId = getTaskForActivityLocked(token, !nonRoot);  
    15.         if (taskId >= 0) {  
    16.             return mMainStack.moveTaskToBackLocked(taskId, null);  
    17.         }  
    18.         Binder.restoreCallingIdentity(origId);  
    19.     }  
    20.     return false;  
    21. }  


     

    getTaskForActivityLocked:

    [java] view plain copy
     
      1.     <pre class="java" name="code"> /** 
      2.      *  //找出token(activity)所在的栈 
      3.      * @param token 在服务端为ActivityRecord,在客户端为Activity 
      4.      * @param onlyRoot true 则只对root Activity有效,false对所有的Activity都有效 
      5.      * @return 
      6.      */  
      7.     int getTaskForActivityLocked(IBinder token, boolean onlyRoot) {  
      8.         final int N = mMainStack.mHistory.size();  
      9.         TaskRecord lastTask = null;  
      10.         for (int i=0; i<N; i++) {  
      11.             ActivityRecord r = (ActivityRecord)mMainStack.mHistory.get(i);  
      12.             if (r == token) {  
      13.                 if (!onlyRoot || lastTask != r.task) {//不是root Activity时返回第一次匹配的task,否则查找root Activity对应的task  
      14.                     return r.task.taskId;  
      15.                 }  
      16.                 return -1;  
      17.             }  
      18.             lastTask = r.task;  
      19.         }  
      20.   
      21.         return -1;  
      22.     }  
      23. </pre><pre class="java" name="code"><pre></pre>  
      24. <p>mMainStack为ActivityStack,moveTaskToBackLocked如下:</p>  
      25. <pre class="html" name="code">    /** 
      26.      * Worker method for rearranging history stack.  Implements the function of moving all  
      27.      * activities for a specific task (gathering them if disjoint) into a single group at the  
      28.      * bottom of the stack. 
      29.      * 把特定的task移到栈底,并且保持顺序不变 
      30.      * If a watcher is installed, the action is preflighted and the watcher has an opportunity 
      31.      * to premeptively cancel the move. 
      32.      *  
      33.      * @param task The taskId to collect and move to the bottom. 
      34.      * @return Returns true if the move completed, false if not. 
      35.      */  
      36.     final boolean moveTaskToBackLocked(int task, ActivityRecord reason) {  
      37. </pre><pre class="html" name="code">    ....</pre><pre class="html" name="code"> //移动到底部  
      38.         while (pos < N) {  
      39.             ActivityRecord r = mHistory.get(pos);  
      40.             if (localLOGV) Slog.v(  
      41.                 TAG, "At " + pos + " ckp " + r.task + ": " + r);  
      42.             if (r.task.taskId == task) {  
      43.                 if (localLOGV) Slog.v(TAG, "Removing and adding at " + (N-1));  
      44.                 if (DEBUG_ADD_REMOVE) {  
      45.                     RuntimeException here = new RuntimeException("here");  
      46.                     here.fillInStackTrace();  
      47.                     Slog.i(TAG, "Removing and adding activity " + r + " to stack at "  
      48.                             + bottom, here);  
      49.                 }  
      50.                 mHistory.remove(pos);  
      51.                 mHistory.add(bottom, r);  
      52.                 moved.add(r);  
      53.                 bottom++;  
      54.             }  
      55.             pos++;  
      56.         }}</pre><pre class="html" name="code">   ....</pre><pre class="html" name="code">}  
      57. </pre>  
      58. <p><br>  
      59.  </p>  
      60. <pre></pre>  
      61. <pre></pre>  
      62.      
      63. </pre>  
  • 相关阅读:
    Sun:收购MySQL是现代软件史上最重要收购[ZT]
    SCI2012年收录的中文期刊
    Elsevier期刊投稿状态
    医学图像SCI
    贝叶斯法则,先验概率,后验概率,最大后验概率
    医学图像处理与分析方面的大牛
    2013 EI检索的国内期刊
    ICIP EMBC IUS 2013
    香港中文大学第六十九届颁授学位典礼 校长赠言 我默祷你们都能不负此生
    自动生成参考文献编号
  • 原文地址:https://www.cnblogs.com/zhengtu2015/p/5144884.html
Copyright © 2011-2022 走看看