当前位置: 首页 > news >正文

上传到网站女生做网站编辑好还是

上传到网站,女生做网站编辑好还是,广州冼村租房,郑州做网站企业一、Context 基础概念 1、什么是Context 1) Context是一个抽象类#xff0c;其通用实现在ContextImpl类中。 2) Context#xff1a;是一个访问application环境全局信息的接口#xff0c;通过它可以访问application的资源和相关的类#xff0c;其主要功能如下其通用实现在ContextImpl类中。 2) Context是一个访问application环境全局信息的接口通过它可以访问application的资源和相关的类其主要功能如下 • 启动Activity         • 启动和停止Service         • 发送广播消息(Intent)         • 注册广播消息(Intent)接收者         • 可以访问APK中各种资源(如Resources和AssetManager等)         • 可以访问Package的相关信息         • APK的各种权限管理 从以上分析可以看出Context就是一个对APK包无所不知的大管家大家需要什么直接问它就可以了。 3) Context 与View 的关系         View与Context(或Activity)的关系类似于明星与经纪人的关系所以创建View时必须明确指定其Context(即经纪人或大管家)否则View就成不了明星。 另外有一个简单的问题是一个应用程序App中存在多少个Context实例对象呢 Context中文直译为“上下文”SDK中对其说明如下 Interface to global information about an application environment. This is an abstract class whose implementationis provided by the Android system. It allows access to application-specific resources and classes, as well as up-callsfor application-level operations such as launching activities, broadcasting and receiving intents, etc 从上可知一下三点,即 1、它描述的是一个应用程序环境的信息即上下文。 2、该类是一个抽象(abstract class)类Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。 3、通过它我们可以获取应用程序的资源和类也包括一些应用级别操作例如启动一个Activity发送广播接受Intent信息等。 应用程序创建Context实例的情况有如下几种情况 1、创建Application 对象时 而且整个App共一个Application对象 2、创建Service对象时 3、创建Activity对象时 因此应用程序App共有的Context数目公式为总Context实例个数 Service个数 Activity个数 1Application对应的Context实例 2、 Context 类结构 可以看到Activity、Service、Application都是Context的子类 也就是说Android系统的角度来理解Context是一个场景代表与操作系统的交互的一种过程。从程序的角度上来理解Context是个抽象类而Activity、Service、Application等都是该类的一个实现。 在仔细看一下上图Activity、Service、Application都是继承自ContextWrapper而ContextWrapper内部会包含一个base context由这个base context去实现了绝大多数的方法。 二、具体创建Context的时机 1、创建Application对象的时机 每个应用程序在第一次启动时都会首先创建Application对象。如果对应用程序启动一个Activity(startActivity)流程比较清楚的话创建Application的时机在创建handleBindApplication()方法中。 2、创建Activity对象的时机 通过startActivity() 或startActivityForResult() 请求启动一个Activity时如果系统检测需要新建一个Activity对象时就会回调handleLaunchActivity()方法该方法继而调用performLaunchActivity()方法去创建一个Activity实例并且回调onCreate()onStart()方法等。 3、创建Service对象的时机 通过startService或者bindService时如果系统检测到需要新创建一个Service实例就会回调handleCreateService()方法完成相关数据操作。 三、Context 的具体使用      Android中context可以作很多操作但是最主要的功能是加载和访问资源。在android中常用两种context一种是application context一种是activity context通常我们在各种类和方法间传递的是activity context。 继承关系 区别联系 [java] view plaincopy public class MyActivity extends Activity {       public void method() {           mContext  this; // since Activity extends Context           mContext  getApplicationContext();           mContext  getBaseContext();       }   }   this 是Activity 的实例扩展了Context其生命周期是Activity 创建到销毁。getApplicationContext()返回应用的上下文生命周期是整个应用应用摧毁它才摧毁。Activity.this的context 返回当前activity的上下文属于activity activity摧毁他就摧毁getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文SDK文档很少不推荐使用搞清楚了生命周期就会在使用过程中犯错误比如有一个全局的数据操作类用到了context这个时候就要getApplicationContext 而不是用ACtivity这就保证了数据库的操作与activity无关不会一直引用Activity的资源防止内存泄漏。 应用场景 比如一个activity的onCreate [java] view plaincopy protected void onCreate(Bundle state) {       super.onCreate(state);       TextView label  new TextView(this);        label.setText(Leaks are bad);       setContentView(label);   }   把activity context传递给view意味着view拥有一个指向activity的引用进而引用activity占有的资源view hierachy, resource等。这样如果context发生内存泄露的话就会泄露很多内存。这里泄露的意思是gc没有办法回收activity的内存。 Leaking an entire activity是很容易的一件事。当屏幕旋转的时候系统会销毁当前的activity保存状态信息再创建一个新的activity。 比如我们写了一个应用程序它需要加载一个很大的图片我们不希望每次旋转屏幕的时候都销毁这个图片重新加载。 实现这个要求的简单想法就是定义一个静态的Drawable这样Activity类创建销毁它始终保存在内存中。实现示例 [java] view plaincopy public class myactivity extends Activity {       private static Drawable sBackground;       protected void onCreate(Bundle state) {           super.onCreate(state);           TextView label  new TextView(this);           label.setText(Leaks are bad);           if (sBackground  null) {               sBackground  getDrawable(R.drawable.large_bitmap);           }           label.setBackgroundDrawable(sBackground);//drawable attached to a view           setContentView(label);   }   这段程序看起来很简单但是却问题很大。当屏幕旋转的时候会有leak即gc没法销毁activity。我们刚才说过屏幕旋转的时候系统会销毁当前的activity。但是当drawable和view关联后drawable保存了view的reference即sBackground保存了label的引用而label保存了activity的引用。既然drawable不能销毁它所引用和间接引用的都不能销毁这样系统就没有办法销毁当前的activity于是造成了内存泄露。gc对这种类型的内存泄露是无能为力的。避免这种内存泄露的方法是避免activity中的任何对象的生命周期长过activity避免由于对象对activity的引用导致activity不能正常被销毁。我们可以使用application context。application context伴随application的一生与activity的生命周期无关。application context可以通过Context.getApplicationContext()或者Activity.getApplicationContext()方法获取。 定制一个自己的Application首先创建一个MyApplication类继承自Application [java] view plaincopy public class MyApplication extends Application{       private static Context context;          public void onCreate(){           contextgetApplicationContext();       }          public static Context getContext(){           return context;       }   }   p /p   注意当程序启动的时候应该初始化MyApplication类而不是默认的Application类。在AndroidMainifest.xml文件的标签下进行指定就可以了。 android:namecom.example.hl.MyApplication 这样就已经实现了一种全局获取Context的机制之后想在项目中使用Application的Context时只需调用一下MyApplication.getContext()就可以了。 避免context相关的内存泄露记住以下几点 1. 不要让生命周期长的对象引用activity context即保证引用activity的对象要与activity本身生命周期是一样的 2. 对于生命周期长的对象可以使用application context 3. 避免非静态的内部类尽量使用静态类避免生命周期问题注意内部类对外部对象引用导致的生命周期变化
http://www.pierceye.com/news/867962/

相关文章:

  • 做宠物网站需要实现什么功能成都建工网站
  • jsp购物网站开发 论文海口澄迈县建设局网站
  • 单页销售网站制作制作花都区网站建设
  • 如何建立自己的购物网站discuz手机模板
  • 网站被刷流量怎么办wordpress fold主题
  • 做的新网站网上搜不到临沂免费做网站
  • 高端大气的网站制作建筑人才网下载
  • 如何快速提升网站关键词排名综合服务平台一站式服务平台网站开发
  • 阿土伯 是做网站的吗建设厅国网查询网站
  • 天长哪个广告公司做网站中国菲律宾汇率换算
  • 动漫在线制作网站wordpress get_template_part
  • 肇庆高端品牌网站建设住建部网站资质查询中宏建设集团
  • 扁平化网站模板下载莱西网站建设哪家好
  • 用vis做的简单网站网站建设需求方案pdf
  • 怎么免费做网站视频教学沈阳网站备案
  • 徐州有哪些网站制作公司太原住房和城乡建设部网站
  • 专门做摩托车的网站注册域名阿里云
  • 做个简单的网站建站公司费用
  • 网站建设举措网站免费建站方法
  • 遵义市双控体系建设网站wamp wordpress安装
  • 厦门的网站建设公司龙岗网站-建设深圳信科
  • 上海网站建设q.479185700強成都上界品牌设计事务所
  • 产品设计优秀网站做网站申请多少类商标
  • 中国行业网站贵州网站建设seo优化
  • 网站部兼容ie6没有防盗链的网站
  • google网站推广网站自助平台
  • 外贸自建站多久能出单wordpress的pdf阅读
  • 深圳东莞的网站建设公司网店代运营哪里好
  • 做费网站wordpress折叠代码
  • 分析海报的网站企业网站服务费怎么做记账凭证