2016 - 2024

感恩一路有你

jframe添加目录的方法 丧尸围城3怎么解锁帧率?

浏览量:2302 时间:2023-05-16 13:52:25 作者:采采

丧尸围城3怎么解锁帧率?

盗墓防御3解锁帧率如下。

选择自己的码率,然后在游戏目录下新建一个文件,在里面输入gmpcr_unlock_fram

has leaked window 怎么解决?

我想大部分人都能区分这三个东西的概念,但是具体区别就很难讲了。我 我在这里根据我个人的理解,谈谈我个人对这三个概念的理解。当然,一般的GUI设计,比如一般的事件窗口模型,都是在这里设计的,所以我赢了 这里不谈,我纯粹从概念上区分。Activity是Android应用的载体,它允许用户在上面创建一个用户界面,并为用户提供处理事件的API,如onKeyEvent、onTouchEvent。并维护应用的生命周期(因为android应用的运行环境不同于其他操作系统,android应用是在框架内运行的,所以他的应用可以不从流程的层面考虑,更多的是从理念上考虑。Android应用由多个活动组成,每个活动都有自己独立的生命周期)。活动本身就是一个巨大的载体,可以理解为应用的载体。没有活跃度,安卓应用就不会运行。也可以理解为安卓应用的入口。活动的实例对象由系统维护。ActivityManager是一个系统服务,负责维护activity的实例对象,并根据其运行状态维护其状态信息。但在用户层面,程序员可能愿意理解为一个接口的载体。但它只是一个载体,不负责绘图。Activity的内部实现实际上是一个窗口对象。Window是一个抽象类,具体在Android _ src _ home/framework/policies/base/phone/com/Android/internal/policy/impl目录下。当我们调用activity的setContentView方法时,实际上调用的是Window对象的setContentView方法,所以我们可以看到Activity中界面的绘制实际上是由Window对象完成的。如果画一个类图,可以看到Activity聚合了一个Window对象。以下是setContentView方法在PhoneWindow中的实现:@ override public void setcontent view(view,params){ if(mContentParent null){ install decor()} else {()}(view,params)final Callback CB get Callback()if(CB!Null) {cb.oncontentchanged ()}}窗口首先判断mContentParent是否为空,然后调用installDecor方法(安装装饰器)。让 让我们来看看这个方法是如何实现的:private void install decoder(){ if(mde cor null){ mde cor generate decoder()(true)} if(mcontendent parent null)。{ mContentParent generate layout(mde cor)mTitleView(TextView)findViewById()if(mTitleView!null){ if((get local features()amp(1 ltlt FEATURE _ NO _ TITLE))!0){ View title container findViewById(_ container)if(title container!null) {(视图。没了)} else {(查看。GONE)} if(frame layout的mContentParent实例){ ((FrameLayout)mContentParent)。set foreground(null)} } Else {(m title)} } }在这个方法中,首先创建一个DecorView,这是一个扩展FrameLayout的类,是所有窗口的根视图。我们在活动中调用的setConctentView被放在DecorView中。这是我们的类图聚合关系如下:activity-gtwindow-gtdecorview,这是这三个类之间最直接的关系。让 让我们详细分析类对象是如何创建的。让 s不考虑activity的创建(因为Activity的实例是由ActivityManager维护的,与IPC的通信是在另一个进程中设计的,后面会提到。),并考虑窗口和视图的创建。创建活动后,系统将调用其attach方法将活动添加到ActivityThread中。我们发现Activity的attach方法如下:final void attach (context context,activity thread a thread,instrumentation instr,ibinder token,intident,Application application,Intent intent,ActivityInfo,CharSequence title,Activity parent,String id,Object lastonconfigurationinstance,HashMapltString,Object gt lastonconfigurationchild instances,Configuration config){ attachBaseContext(context)mWindow(this)(this)if(!_ INPUT _ STATE _ UNSPECIFIED){()} mui thread()mMainThread min struction instr mToken token mIdent ident map application application minent intent m component()mActivityInfo m title title m parent membered did id mLastNonConfigurationInstance lastonconfigurationinstance mLastNonConfigurationChildIns tances lastonconfigurationchildinstances(null,m token,m component . flattentostring())if(m parent!null){(()} mWindowmanager()mcurrentconfig } Let ;让我们看看红色代码部分,这是创建窗口对象的代码。。有兴趣的同学可以跟进看看是怎么创作出来的。其实很简单。它的内部实现调用策略对象的makeNewWindow方法。方法直接添加一个PhoneWindow对象如下:public phone window make new window(context context){ return new phone window(context)}这时我们已经可以把进程串起来了。创建活动后,系统将调用其attach方法,将其添加到ActivityThread中,并在attach方法中创建一个window对象。下面分析一下视图的创建。我们知道Window聚合了DocerView,当用户调用setContentView时,会有一个视图树作为已经创建的实例对象返回到树中,所以我们研究DocerView是什么,是如何创建的。让 让我们回头看看窗口实现中的setContentView方法。让 让我们看看上面代码的红色部分,setContentView-gt install Decor-gt generated Decor。GenerateDecor直接创建一个DecorView对象:Protected Decor View generate Decor()。{Return New DecorView (getContext(),-1)}我们可以看看DecorView的实现,它是PhoneWindow的内部类。实现非常简单。默认情况下,它会包含一个灰色的标题栏,然后标题栏下会包含一个空白区域,用来放置用户调用setContentView时的用户视图,并传递事件。我不 这里不想做详细的分析,有兴趣的同学可以自己研究一下。创建DecorView后,返回到窗口中的setContentView方法。查看上面代码的蓝色部分,并调用(View,params)来添加用户 的视图树进行去视图。到目前为止,我认为我们已经清楚地认识到它们之间的关系,并且知道它们的创造过程。综上所述,Activity在onCreate之前调用attach方法,在attach方法中创建一个窗口对象。创建窗口对象时,没有创建装饰对象。用户在Activity中调用setContentView,然后调用window的setConte。NtView,此时,它会检查DecorView是否存在,如果不存在,它会创建一个DecorView对象,然后添加用户 自己的观点。

对象 方法 视图 Activity setContentView

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。