ƵµÀÀ¸Ä¿
Ê×Ò³ > ³ÌÐò¿ª·¢ > ÒÆ¶¯¿ª·¢ > ÆäËû > ÕýÎÄ
dzÎöonWindowsFocusChanged()·½·¨
2017-07-11 10:56:19         À´Ô´£ºa282255307µÄ²©¿Í  
Êղؠ  ÎÒҪͶ¸å

ÄÚÈÝ

¸ÅÊö

´Ó×ÖÃæÉÏÀ´½²£¬onWindowsFocusChanged()·½·¨ÊÇÖ¸µ±´°¿Ú½¹µã±ä»¯µÄʱºò£»´ÓÒâÒåÀ´Ëµ£¬onWindowsFocusChanged()¾ÍÊÇÖ¸µ±Ç°µÄActivityµÄWindows(´°¿Ú)»ñÈ¡»òÕßʧȥ½¹µãʱÕâ¸ö·½·¨¾Í»á±»µ÷Ó㬲¢ÇÒµ±»Øµ÷Õâ¸ö·½·¨Ê±£¬ActivityÊÇÍêÈ«¿É¼ûµÄ¡£

ÔÚActivityÉúÃüÖÜÆÚÖУ¬onStart(), onResume(), onCreate()¶¼²»ÊDz¼¾ÖvisibleµÄʱ¼äµã£¬ÕæÕýµÄvisibleʱ¼äµãÊÇonWindowFocusChanged()º¯Êý±»Ö´ÐÐʱ¡£´ÓonWindowFocusChanged()±»Ö´ÐÐÆð£¬Óû§¿ÉÒÔÓëÓ¦ÓýøÐн»»¥ÁË£¬»»¾ä»°Ëµ£¬Èç¹ûÄãÏëÒªÔÚActivity¼ÓÔØºó×öЩ²Ù×÷£¬¿ÉÒÔÔÚÕâ¸ö·½·¨Àïµ÷ÓöøÕâ֮ǰ£¬¶ÔÓû§µÄ²Ù×÷ÐèÒª×öÒ»µãÏÞÖÆ¡£

onWindowFocusChanged()µÄʹÓÃÇé¾°Óë×÷ÓÃ

¸ù¾Ý½éÉÜ¿ÉÒÔÁ˽⣬onWindowFocusChanged()ʹÓÃÓÚÒÔϵÈÇé¾°£º

Ê״νøÈëÒ»¸öActivityºó»áÔÚonResume()·½·¨ºóÃæµ÷Óã»

´ÓActivity Ìøµ½ÁíÒ»¸öActivity£¬ÐµĴ°¿Ú»á»ñÈ¡½¹µã, ¾ÍµÄActivityµÄ´°¿Ú»áʧȥ½¹µã£»

´ò¿ªÈí¼üÅ̽øÐÐÊäÈëʱ£¬´°¿Úʧȥ½¹µã£»

Èí¼üÅÌÊäÈëÍê±ÏÏûʧʱ£¬´°¿ÚÖØÐ»ñÈ¡½¹µã£»

Ó¦ÓýøÈëºǫ́£¬´°¿Úʧȥ½¹µã£»

Ó¦ÓôӺǫ́·µ»Øµ±Ç°, ´°¿ÚÖØÐ»ñÈ¡½¹µã£»

Òò´ËÆä¿ÉÒÔÓÐÈçÏÂ×÷Óãº

¼à¿ØÒ»¸öActivityÊÇ·ñÔØÍê±Ï£»

ÔÚActivity¼ÓÔØºó½øÐÐһЩ²Ù×÷£¬Èç»ñÈ¡ÊÖ»úÆÁÄ»µÄ¸ß¶ÈºÍ¿í¶È£»

µ±Activity¹ÒÆð»ò»Ö¸´Ê±£¬¿ÉÒÔÔÚ·½·¨ÄÚ½øÐÐһЩÊý¾ÝµÄ±£´æ»ò»Ö¸´µÄ²Ù×÷£»

onWindowFocusChanged()µ÷ÓÃÏê½â

½éÉÜÍêonWindowFocusChanged()»ù±¾µÄʹÓÃÇé¾°ÒÔ¼°×÷Óúó£¬ß£¸ödemoÀ´¿´ÏÂonWindowFocusChanged()¾ßÌåµÄµ÷ÓÃÇé¿ö¡£

Ê×ÏÈÔÚActivityÖÐÖØÐ´µÄonWindowFocusChanged()·½·¨ÈçÏ£º

/**  
   * Ìí¼Ó´°ÌåÔÚÊÓͼ³õʼ»¯Íê³É¹ýºó  
   *  
   * @param hasFocus  
   */  
  @Override  
  public void onWindowFocusChanged(boolean hasFocus) {  
      super.onWindowFocusChanged(hasFocus);  
      if (hasFocus) {  
         //add Window.....  
      }  
  }  

ÆäÖвÎÊýhasFocus±íʾ´°¿ÚÊÇ·ñ»ñÈ¡»òʧȥ½¹µã£¬true±íʾ»ñÈ¡½¹µã£¬false±íʾʧȥ½¹µã¡£

È»ºóÎÒÃÇ¿´ÏÂ×ÜÌåµÄ´úÂ룺

public class WindosFoucesDemo extends AppCompatActivity {

    private static final String TAG = "LifeCycleDemo";


    //Activity´´½¨Ê±±»µ÷ÓÃ
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate is called.");
        setContentView(R.layout.activity_main);
    }


    //Activity´´½¨»òÕß´ÓºóÌ¨ÖØÐ»ص½Ç°Ì¨Ê±±»µ÷ÓÃ
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart is called.");
    }


    //Activity´´½¨»òÕß´Ó±»¸²¸Ç¡¢ºóÌ¨ÖØÐ»ص½Ç°Ì¨Ê±±»µ÷ÓÃ
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume is called.");
    }

    //Activity´°¿Ú»ñµÃ»òʧȥ½¹µãʱ±»µ÷ÓÃ,ÔÚonResumeÖ®ºó»òonPauseÖ®ºó
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus){
            Log.i(TAG, "onWindowFocusChanged is called and" + "hasFocus is true");
        }else {
            Log.i(TAG, "onWindowFocusChanged is called and" + "hasFocus is false");
        }

    }

    //Activity±»¸²¸Çµ½ÏÂÃæ»òÕßËøÆÁʱ±»µ÷ÓÃ
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause is called.");
        //ÓпÉÄÜÔÚÖ´ÐÐÍêonPause»òonStopºó,ϵͳ×ÊÔ´½ôÕŽ«ActivityɱËÀ,ËùÒÔÓбØÒªÔڴ˱£´æ³Ö¾ÃÊý¾Ý
    }

    //Í˳öµ±Ç°Activity»òÕßÌø×ªµ½ÐÂActivityʱ±»µ÷ÓÃ
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop is called.");
    }

    //Í˳öµ±Ç°Activityʱ±»µ÷ÓÃ,µ÷ÓÃÖ®ºóActivity¾Í½áÊøÁË
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestory is called.");
    }


    //Activity´ÓºóÌ¨ÖØÐ»ص½Ç°Ì¨Ê±±»µ÷ÓÃ
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart called.");
    }
}

ÔËÐиÃDemo£¬²é¿´LogÈÕÖ¾£¬¿ÉÒԵõ½ÒÔÏÂÈÕÖ¾½á¹û¡£

1. Æô¶¯Activityʱ:

image

2. °´ÏÂÈÎÎñÀ¸¼ü£¬Activity±»ÕÚµ²Ê±£º<†·Ÿ"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="image" src="/uploadfile/Collfiles/20170710/201707100947351297.png" title="\" />

×¢Ò⣺°´ËøÆÁ¼üºÍ°´ÈÎÎñÀ¸»òÕßHome¼üµÄÉúÃüÖÜÆÚÊDz»Í¬µÄ£¬°´HomeÖ´ÐÐonPause –> onStop –> onRestart –> onStart —> onResume °´ËøÆÁ¼üºÍ¶Ô»°¿ò¸²¸Ç½çÃæµÄÉúÃüÖÜÆÚÊÇÒ»ÑùµÄ£¬¶¼Ö»»á½øÐÐonPause £­£­> onResume .²»»áÖ´ÐÐonStop,onRestart,onStart¡£

3. Activity»Ö¸´µ½Ç°Ì¨Ê±£º

image

4. ActivityÍ˳öʱ£º

image

´ÓÉÏÃæµÄÀý×ÓÒÔ¼°½á¹û¿ÉÒÔÇå³þµÄonWindowFocusChanged()ÔÚÕû¸öActivityÉúÃüÖÜÆÚÄڵĵ÷ÓÃÇé¿ö£¬¿ÉÒÔ¸ù¾ÝÕâЩ½á¹û£¬ÔÚ¿ª·¢ÖÐÀ´³ä·ÖÀûÓÃonWindowFocusChanged()·½·¨µÄ×÷Óá£

ͨ¹ýActivityÔ´ÂëÈ¥²é¿´,·¢ÏÖonWindowFocusChanged()Õâ¸ö·½·¨³öÏÖÔÚWindowCallbackWrapper.javaºÍView.javaÕâÁ½¸öÀàÖУ¬¶øWindowCallbackWrapper.javaÖÐÆäʵҲÊǵ÷ÓÃView.javaÖеÄonWindowFocusChanged()£¬Æä´úÂëÈçÏ£º

     /**
     * Called when the window containing this view gains or loses focus.  Note
     * that this is separate from view focus: to receive key events, both
     * your view and its window must have focus.  If a window is displayed
     * on top of yours that takes input focus, then your own window will lose
     * focus but the view focus will remain unchanged.
     *
     * @param hasWindowFocus True if the window containing this view now has
     *        focus, false otherwise.
     * µ±Ç°µÄwindow(´°¿Ú)»ñÈ¡»òÕßʧȥ½¹µãµÄʱºò»á»Øµ÷Õâ¸ö·½·¨.Çë×¢Òâ,Õâ¸ö½¹µãºÍ
     * view½¹µãÊÇ·ÖÀëµÄ,ΪÁË»ñÈ¡°´¼üʼþ,viewºÍviewËùÔڵĴ°¿Ú¶¼±ØÐë»ñµÃ½¹µã.Èç¹û * Ò»¸ö´°¿Ú´¦ÓÚÄãµÄÊäÈëʼþµÄ×îÉϲã,ÄÇô¸Ã´°¿Ú½«Ê§È¥½¹µã¶øviewµÄ½¹µã»á±£³Ö²»
     * ±ä.
     */
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        //»ñÈ¡Èí¼üÅÌa system window such as the keyguard may 
        InputMethodManager imm = InputMethodManager.peekInstance();
        if (!hasWindowFocus) {
            if (isPressed()) {  
                //¼üÅÌÓа´ÏÂʼþ,ÔòÇ¿ÖÆ½«¸Ãview°üº¬µÄËùÓÐ×ӿؼþÈ«²¿setPressed()ÉèÖÃΪfalse
                setPressed(false);
            }
            if (imm != null && (mPrivateFlags & FOCUSED) != 0) {
                //ÕâÊÇÒ»¸öÒþ²ØµÄ·½·¨(´ø@hide±êÇ©),µ±viewʧȥ½¹µãʱ»áµ÷Óø÷½·¨
                imm.focusOut(this);
            }
            //ÒÆonWindowFocusChanged(boolean hasFocus) ±»»Øµ÷µÄ´¥·¢Ê±»úÊÇ´°¿Ú»ñÈ¡»òʧȥ½¹µãµÄʱºò.³ý³¤°´Ê¼þ»Øµ÷µÄ½Ó¿Ú·½·¨
            removeLongPressCallback();
            //ÒÆ³ýÇᴥ̽²âÆ÷,Ô´ÂëÖнР"Remove the tap detection timer."
            removeTapCallback();
            //µ±½¹µã(fucos)´Ó°´Ï±ä³ÉÈ¡ÏûµÄʱºò»áµ÷ÓÃ,ÊôÓÚÒþ²Ø·½·¨
            onFocusLost();
        } else if (imm != null && (mPrivateFlags & FOCUSED) != 0) {
            //µ±view»ñµÃ½¹µãʱµ÷Óø÷½·¨,ÊôÓÚÒþ²Ø·½·¨
            imm.focusIn(this);
        }
        //Ç¿ÖÆviewË¢ÐÂdrawable state,²¢ÇÒ»á»Øµ÷drawableStateChanged()·½·¨
        refreshDrawableState();
    }

´ÓÔ´Âë¿ÉÒÔÑéÖ¤³ö£¬onWindowFocusChanged()·½·¨±»»Øµ÷µÄ´¥·¢Ê±»úÊÇ´°¿Ú»ñÈ¡»òʧȥ½¹µãµÄʱºò¡£²¢ÇÒÔÚonResume()·½·¨ÖеĹٷ½½âÊÍ Use {@link #onWindowFocusChanged} to know for certain that your activity is visible to the user (for example, to resume a game). ¿ÉÒÔÖªµÀonWindowFocusChanged()µÚÒ»´Îµ÷ÓÃÊÇÔÚonResume()·½·¨ºóÃæ¡£

µã»÷¸´ÖÆÁ´½Ó ÓëºÃÓÑ·ÖÏí!»Ø±¾Õ¾Ê×Ò³
ÉÏһƪ£ºÎ¢ÐÅС³ÌÐòpickerÖÐrange-keyÖбØÐë´øµ¥ÒýºÅ
ÏÂһƪ£ºÍ¨¹ýÔ´ÂëÏê½â Servlet
Ïà¹ØÎÄÕÂ
ͼÎÄÍÆ¼ö
µã»÷ÅÅÐÐ

¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ¹ã¸æ·þÎñ | Ͷ×ʺÏ×÷ | °æÈ¨ÉêÃ÷ | ÔÚÏß°ïÖú | ÍøÕ¾µØÍ¼ | ×÷Æ··¢²¼ | Vip¼¼ÊõÅàѵ | ¾Ù±¨ÖÐÐÄ

°æÈ¨ËùÓÐ: ºìºÚÁªÃË--ÖÂÁ¦ÓÚ×öʵÓõÄIT¼¼ÊõÑ§Ï°ÍøÕ¾