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

上海各区的网站有哪些公司wordpress主题排行

上海各区的网站有哪些公司,wordpress主题排行,苍南规划建设局网站,在线制作印章生成免费两周的奋战,终于对Gallery的结构有了个大致的了解。Gallery是一个很好的Android系统知识的学习源码,不仅仅因为它设计到了多线程,布局优化,Opengl的结合等等内容。还有两点必须说明的地方,一个是前文提到国的GLView.ja…
两周的奋战,终于对Gallery的结构有了个大致的了解。Gallery是一个很好的Android系统知识的学习源码,不仅仅因为它设计到了多线程,布局优化,Opengl的结合等等内容。还有两点必须说明的地方,一个是前文提到国的GLView.java:Gallery没有用到任何android提供的View类,而是自己写了一个融合Opengl绘图的GLView,掌握它对于理解android的View架构有很大的帮助。另外一个则是本文要提到的ActivityState.java。它也同GLView一样,模仿了系统Activity类的实现,Gallery中的页面不是一个个的Activity,而是一个个的ActivityState。同时还有一个StateManager.java类帮助管理这些ActivityState子类。


   初学Activity的时候,我们总是在onCreate()编写自己的代码,疑惑的是这个onCreate()由谁调用呢?深入学习之后,我们知道它由Android系统进程在合适的时候调用。Gallery中的StateManager很好的模仿了这一点,从这里我们可以窥见Activity的生命周期是如何通过这几个on...函数实现的。

StateManager.java

[java] view plain copy print ?
  1.  public StateManager(AbstractGalleryActivity activity) {  
  2.         mActivity = activity;  
  3.     }
    public StateManager(AbstractGalleryActivity activity) {
mActivity = activity;
}
这是它的构造函数,AbstractGalleryActivity是一个继承自系统Activity的类,因此最终Gallery里模仿的这些ActivityState类还是要和某个具体的Activity关联起来,因为系统只认识真正的Activity。

1. startState()——startActivity()

[java] view plain copy print ?
  1.  public void startState(Class<? extends ActivityState> klass,  
  2.             Bundle data) {  
  3.         Log.v(TAG, "startState " + klass);  
  4.         ActivityState state = null;  
  5.         try {  
  6.             state = klass.newInstance();  
  7.         } catch (Exception e) {  
  8.             throw new AssertionError(e);  
  9.         }  
  10.         if (!mStack.isEmpty()) {//栈不为空   
  11.             ActivityState top = getTopState();//获取栈顶ActivityState对象   
  12.             top.transitionOnNextPause(top.getClass(), klass,  
  13.                     StateTransitionAnimation.Transition.Incoming);  
  14.             if (mIsResumed) top.onPause();//调用这个startState或者说创建一个新的ActivityState有两种可能,一是第一次启动   
  15.                                           //Gallery,创建的是AlbumSetPage,二是在几个ActivityState的子类状态间的切换   
  16.                                           //即AlbumSetPage和AlbumPage,AlbumPage和PhotoPage间的切换。在第二种情况中   
  17.                                           //某一个ActivityState已经在栈顶,处于保留(onResume)状态,因此mIsResumed为true。   
  18.                                           //这里的疑问是既然它们处于onResume,那么只需要调用onResume()即可,为什么还要创建新的   
  19.                                           //对象呢   
  20.         }  
  21.         state.initialize(mActivity, data);  
  22.   
  23.         mStack.push(new StateEntry(data, state));//每一个新创的ActivityState都要入栈,   
  24.         state.onCreate(data, null);  
  25.         if (mIsResumed) state.resume();//同上疑问。解决这个疑问,需要看什么时候调用的startState()和resume()中作了什么   
  26.     }
    public void startState(Class<? extends ActivityState> klass,
Bundle data) {
Log.v(TAG, "startState " + klass);
ActivityState state = null;
try {
state = klass.newInstance();
} catch (Exception e) {
throw new AssertionError(e);
}
if (!mStack.isEmpty()) {//栈不为空
ActivityState top = getTopState();//获取栈顶ActivityState对象
top.transitionOnNextPause(top.getClass(), klass,
StateTransitionAnimation.Transition.Incoming);
if (mIsResumed) top.onPause();//调用这个startState或者说创建一个新的ActivityState有两种可能,一是第一次启动
//Gallery,创建的是AlbumSetPage,二是在几个ActivityState的子类状态间的切换
//即AlbumSetPage和AlbumPage,AlbumPage和PhotoPage间的切换。在第二种情况中
//某一个ActivityState已经在栈顶,处于保留(onResume)状态,因此mIsResumed为true。
//这里的疑问是既然它们处于onResume,那么只需要调用onResume()即可,为什么还要创建新的
//对象呢
}
state.initialize(mActivity, data);
mStack.push(new StateEntry(data, state));//每一个新创的ActivityState都要入栈,
state.onCreate(data, null);
if (mIsResumed) state.resume();//同上疑问。解决这个疑问,需要看什么时候调用的startState()和resume()中作了什么
}
通过反射机制获取某个ActivityState子类的实例,因此在这里管理创建我们需要的ActivityState的实例,并且StateManager管理着一个栈,这个栈保存着创建的ActivityState实例。这也同Activity有着相类似的效果。

栈中保存的是StateEntry这一内部类,它只有两个成员,一个ActivityState和一个Bundle。因此栈中保存着一个ActivityState对象和它相关的数据。

关于这里的top.transitionOnNextPause(),我们先来看看Gallery图片浏览的结构:

主界面(AlbumSetPage)————>某个相册(AlbumPage)————>单张照片(PhotoPage)

这个函数对AlbumPage和PhotoPage二者的相互界面转换设置了动画。

2.startStateForResult——startActivityForResult


[java] view plain copy print ?
  1. public void startStateForResult(Class<? extends ActivityState> klass,  
  2.             int requestCode, Bundle data) {  
  3.         Log.v(TAG, "startStateForResult " + klass + ", " + requestCode);  
  4.         ActivityState state = null;  
  5.         try {  
  6.             state = klass.newInstance();  
  7.         } catch (Exception e) {  
  8.             throw new AssertionError(e);  
  9.         }  
  10.         state.initialize(mActivity, data);  
  11.         state.mResult = new ActivityState.ResultEntry();//state.mResult隶属于新创的这个ActivityState   
  12.         state.mResult.requestCode = requestCode;  
  13.   
  14.         if (!mStack.isEmpty()) {//如果栈不为空,那么把新创的这个ActivityState的state.mResult结果返回给栈顶的对象,因为这个ActivityState由栈顶的那个对象启动,结果也是它要的。   
  15.             ActivityState as = getTopState();  
  16.             as.transitionOnNextPause(as.getClass(), klass,  
  17.                     StateTransitionAnimation.Transition.Incoming);  
  18.             as.mReceivedResults = state.mResult;  
  19.             if (mIsResumed) as.onPause();  
  20.         } else {  
  21.             mResult = state.mResult;//第一次创建,结果由自己保存。   
  22.         }  
  23.   
  24.         mStack.push(new StateEntry(data, state));  
  25.         state.onCreate(data, null);//这里是我们需要关注的,入栈在onCreate()之前,因此界面上的所有操作应该都是对应于栈顶的那个对象。   
  26.         if (mIsResumed) state.resume();  
  27.     }
    public void startStateForResult(Class<? extends ActivityState> klass,
int requestCode, Bundle data) {
Log.v(TAG, "startStateForResult " + klass + ", " + requestCode);
ActivityState state = null;
try {
state = klass.newInstance();
} catch (Exception e) {
throw new AssertionError(e);
}
state.initialize(mActivity, data);
state.mResult = new ActivityState.ResultEntry();//state.mResult隶属于新创的这个ActivityState
state.mResult.requestCode = requestCode;
if (!mStack.isEmpty()) {//如果栈不为空,那么把新创的这个ActivityState的state.mResult结果返回给栈顶的对象,因为这个ActivityState由栈顶的那个对象启动,结果也是它要的。
ActivityState as = getTopState();
as.transitionOnNextPause(as.getClass(), klass,
StateTransitionAnimation.Transition.Incoming);
as.mReceivedResults = state.mResult;
if (mIsResumed) as.onPause();
} else {
mResult = state.mResult;//第一次创建,结果由自己保存。
}
mStack.push(new StateEntry(data, state));
state.onCreate(data, null);//这里是我们需要关注的,入栈在onCreate()之前,因此界面上的所有操作应该都是对应于栈顶的那个对象。
if (mIsResumed) state.resume();
}

3.createOptionsMenu

[java] view plain copy print ?
  1. public boolean createOptionsMenu(Menu menu) {  
  2.         if (mStack.isEmpty()) {  
  3.             return false;  
  4.         } else {  
  5.             return getTopState().onCreateActionBar(menu);//因为startState()调用在前,也即入栈在前。因此后续操作都是对应于当前栈顶的这个对象的。   
  6.         }  
  7.     }
    public boolean createOptionsMenu(Menu menu) {
if (mStack.isEmpty()) {
return false;
} else {
return getTopState().onCreateActionBar(menu);//因为startState()调用在前,也即入栈在前。因此后续操作都是对应于当前栈顶的这个对象的。
}
}

4.resume

[java] view plain copy print ?
  1.  public void resume() {  
  2.         if (mIsResumed) return;  
  3.         mIsResumed = true;  
  4.         if (!mStack.isEmpty()) getTopState().resume();  
  5.     }
    public void resume() {
if (mIsResumed) return;
mIsResumed = true;
if (!mStack.isEmpty()) getTopState().resume();
}
标志位调整为true,具体工作仍交付栈顶对象完成。

5.pause——stop

[java] view plain copy print ?
  1. <SPAN style="FONT-SIZE: 12px">    public void pause() {  
  2.         if (!mIsResumed) return;  
  3.         mIsResumed = false;  
  4.         if (!mStack.isEmpty()) getTopState().onPause();  
  5.     }</SPAN>  
    public void pause() {
if (!mIsResumed) return;
mIsResumed = false;
if (!mStack.isEmpty()) getTopState().onPause();
}
标志位mIsResumed的意义在于判断栈顶的这个ActivityState对象是处于暂停还是工作状态。这样理论上可以解释前面的疑问,当mIsResumed为true时,栈顶的对象当然应该暂停,让新建的对象工作。具体解释还需结合了ActivityState中各项on函数具体做了什么之后说明。

对于这部分内容,如同Activity一样,我们关注其生命循环,此处只写出部分内容,其他异曲同工,写出所有内容太过耗时,因此只在此处抛砖引玉写出开头。

下一篇关注从一个ActivityState对象到另一个ActivityState的跳转。

http://www.yayakq.cn/news/312562/

相关文章:

  • 合适的网站建设的公司怎么找什么网站没人做
  • 自适应网站wordpress重庆蒲公英网站建设公司
  • 网络营销网站源码html网站建设中
  • 浦东新区专业做网站网站的企业风采怎么做
  • 学习网站建设总结国外网站建设方案
  • 做网站推广需要多少钱海南网站建站
  • 企业站模板中企动力销售好做吗
  • 北京网站建设公司网站优化资讯在线学习建设网站
  • 网站屏幕自适应地方网站怎样做
  • 自己怎么做微信小程序网站chrome谷歌浏览器官方下载
  • 哈尔滨网站制作哪里专业网站的联系我们怎么做
  • 电子产品网站建设分析的摘要wordpress 管理员 密码
  • 建设网站的实验目的和意义网页站点规划
  • 做720效果的还有哪个网站租好服务器咋做网站呢
  • 网站建设同步视频台州网站建设seo
  • 长沙租车网站排名网站建设费属于研发费用吗
  • 外贸网站建设 公司河南网站排名优化价格
  • 网站建设过程中的系统结构图泉州市网站api建设
  • 网站模板超市wordpress账号密码在哪个文件下
  • 常见的网站推广方法seo内部优化具体做什么
  • 网站建设学习 服务器wordpress 该插件没有有效的标题
  • 网站的数据库有什么用seo推广沧州公司电话
  • 陕西省国家示范校建设专题网站wordpress评论框样式
  • 精品资源共享课网站建设 碧辉腾乐网站qq联系代码
  • 网站定向推送怎么做如何制作广告
  • 哪种语言做网站好wordpress 快讯模板
  • 3D特效做首页的网站微信团队小程序
  • 厦门营销型网站建设公司网站文章不收录的原因
  • 兰州网站搜索排名游昕手游代理平台
  • 品牌网站响应式网站有哪些网站开发培训内容