attachbasecontext什么时候被调用

2024-05-18 22:25

1. attachbasecontext什么时候被调用

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁 getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文

attachbasecontext什么时候被调用

2. application.attachbasecontext什么时候被调用

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁 getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁 getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文

3. 什么时候用Application的Context,什么时候用Activity的Context

如果我们在Activity A中或者其他地方使用Foo.getInstance()时,我们总是会顺手写一个『this』或者『mContext』(这个变量也是指向this)。 试想一下,当前我们所用的Foo是单例,意味着被初始化后会一直存在与内存中,以方便我们以后调用的时候不会在此次创建Foo对象。但Foo中的 『mContext』变量一直都会持有Activity A中的『Context』,导致Activity A即使执行了onDestroy方法,也不能够将自己销毁。但『applicationContext』就不同了,它一直伴随着我们应用存在(中途也可能 会被销毁,但也会自动reCreate),所以就不用担心Foo中的『mContext』会持有某Activity的引用,让其无法销毁。


看使用的周期是否在activity周期内,如果超出,必须用application;常见的情景包括:AsyncTask,Thread,第三方库初始化等等。
还有些情景,只能用activity:比如,对话框,各种View,需要startActivity的等。

Activity.this 返回当前的Activity实例,如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以。

什么时候用Application的Context,什么时候用Activity的Context

4. unity gc.collect 什么时候调用

最近做的一个项目,是从VB升级到VB.NET的代码,所以,数据库操作使用的是相对较老的方式OO4O (Oracle Objects for OLE)。其中,在较大的一个外部循环中调用一个函数,在该函数中执行了一个SQL查询,但是该外部循环执行到二百多次的时候出现了“ORA-01000:超出最多允许打开的游标数”的错误。查看代码,打开的RecordSet也已经关闭了,不知道问题出在什么地方。最后,在关闭RecordSet的地方添加了GC.Collect调用,问题解决。

5. 什么时候用Application的Context,什么时候用Activity的Context

activity.this要返回一个activity,而getApplicationContext()就不一定返回一个activity getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context 返回当前activity的上下文,属于activity ,a...

什么时候用Application的Context,什么时候用Activity的Context

6. android大牛帮忙解答一下View的生命周期过程。onattachwindow在什么时候调用之

onFinishInflate() 当View中所有的子控件均被映射成xml后触发 
onMeasure(int, int) 确定所有子元素的大小 
onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发    
onSizeChanged(int, int, int, int) 当view的大小发生变化时触发  
onDraw(Canvas) view渲染内容的细节  
onKeyDown(int, KeyEvent) 有按键按下后触发  
onKeyUp(int, KeyEvent) 有按键按下后弹起时触发
onTrackballEvent(MotionEvent) 轨迹球事件  
onTouchEvent(MotionEvent) 触屏事件  
onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发   
onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发  
onAttachedToWindow() 当view被附着到一个窗口时触发  
onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和  onAttachedToWindow() 是相反的。  
onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发

7. 为什么在fragmentz中无法直接调用getcontext了

  在API低于 23 的版本中不会去调用后者,只会去调用onAttach(Activity)。下面是看到的一个比较好的解决方案:

  [java] view plain copy
  /*
  * onAttach(Context) is not called on pre API 23 versions of Android and onAttach(Activity) is deprecated
  * Use onAttachToContext instead
  */
  @TargetApi(23)
  @Override
  public void onAttach(Context context) {
  super.onAttach(context);
  onAttachToContext(context);
  }
  
  /*
  * Deprecated on API 23
  * Use onAttachToContext instead
  */
  @SuppressWarnings("deprecation")
  @Override
  public void onAttach(Activity activity) {
  super.onAttach(activity);
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
  onAttachToContext(activity);
  }
  }
  
  /*
  * Called when the fragment attaches to the context
  */
  protected void onAttachToContext(Context context) {
  //do something
  }

  在用Fragment时,这样复写onAttach方法就可以减少API的影响了。

为什么在fragmentz中无法直接调用getcontext了

最新文章
热门文章
推荐阅读