精华内容
下载资源
问答
  • 演讲的本质是什么.doc

    2020-12-26 12:37:41
    演讲的本质是什么 演讲就是以讲为主,以演为辅,其稿子一定要有小说般的情节,一定要有戏剧般的冲突,还应该有电影的蒙太奇的手法,演讲者还得应该有艺术家的雕塑的成分。演讲的本质是在一定的场合或特定的时境下,...
  • 本文我主要通过查看Activity的实现源码和推测其设计思想的方法来探讨一下Android的本质是什么。 Activity恐怖是Android用得最多且是最基本的组件了,估计也是每个学Android的人接触的第一概念,对于Activity的...

    本文我主要通过查看Activity的实现源码和推测其设计思想的方法来探讨一下Android的本质是什么。


    Activity恐怖是Android用得最多且是最基本的组件了,估计也是每个学Android的人接触的第一概念,对于Activity的理解和说法,层出不穷,有人说是一个窗口,有个说是一个活动,但他的本质是什么呢,官方的说法是Activity一个应用程序的组件,它提供一个屏幕来与用户交互,以便做一些诸如打电话、发邮件和看地图之类的事情,原话如下:

    An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.

    这句话概括的很好,但我并不认为这就是Activity的本质。


    切入主题之前,我们先要了解一下UI系统的职责和原理。所有的图形界面,无论是什么UI系统,都要收集用户的活动,这些活动包括打开和关闭程序,输入事件等,这样系统才能针对这些活动做出一些反应,比如程序打开时加载一个数据库,建立一个网络连接,不过针对这些活动所作出的反应都委托给了具体的应用程序,系统相当于只是把这些事件或消息转发给应用程序。下面是一个简单的图:

    095942_R6bF_587661.png

    这些消息怎么转发给程序呢,可以约定好,要求应程序写一个方法,或如果是C可要求传入一个回调,Java可以要求程序传入一个监听器,总之实现这个功能还是很容易的,但这么多消息,全部传到一个方法里吗,我想那样会很惨,那样可能要求你写应用程序的时候可能要写一个长长的swich语句或if语句,所以一般都把这些消息分类,如一种是整个程序的活动的消息,如关闭和打开,还有就是输入事件,如按键鼠标,每个分类里的消息还可以再细分,这样的话,就可以封装成多个类或接口,每个类有数个方法,之后应用程序重写这些类方法或实现某个接口,系统就可以通过调用这些类或接口的实例发送消息了。

    于是问题转化成了类的设计。在Windows中,有个窗口类来接受一个窗口的活动,系统就可以通过调用窗口类的方法来传递消息,这个窗口类既接受打开和关闭的活动,又接受用户输入事件。而在Android中而不同,Activity只接受打开和关闭等的活动,而不会接受输入事件,那是由Activity内嵌的Window类来接受的,然后转发给相应View,你有可能会说Activity中有个onKeyDown方法,其实那只是处理没人领的按键消息才会到达Activity。现在发现Android和Windows分发消息的的区别了吧,这样化分,每个类的职责更细了,更明确了,当然喽,Android中的消息跟Windows中的可能有点稍小的区别。


    现在应该可以很容易的理确Android的每一个生命周期对应的方法(onCreate, onStart...)其实是处理收到的消息,当用户打开一个Activity的时候,系统(严格的说应该是ActivityManager)就会调用onCreate来告诉你这个消息,这个时候你就要加载你的XML布局文件并做一些初始化。然后离开的时候,就应该把这个Activity销毁吗,如果用户是暂时离开,等下还要回来呢,如果销毁了那就又得重创建,太浪费时间了(用我们家乡话说就是太难费神了),所以不能销毁,但是系统也得通知你用户离开了(用的是onStop方法),因为可能需要暂停播放视频。当下次重新进入的时候,系统又会通知你用户又进来了,这时你可能要恢复播放了,但你有没有发现,用户第一次进入和再次进入,你需要做不同的处理,第一次可能是初始化一些资源,第二次可能只要恢复播放就可以了,所以系统应该告诉你,是第一次进入还是再次进入,于是系统就用了两个方法,用onCreate告诉你用户是第一次进入的,用onStart告诉你用户是再次进入。

    不过这还不算完,还有一种情况,用户是半离开状态,什么是半离开呢,都知道Android的界在有全屏,还是非全屏,也有半透明的,这里的半离开指的就是本界面被一个非全屏或半透明的界面盖住,总之,你还能看到一点点被盖的那个界面;全离开就是被全屏的界面盖住,用户完全看不到被盖的。这两种情况要有可能要区别对待,比如一个播放在线视频的应用,它可能希望要在用户半离开时只暂停播放,不暂停后台下载,而当用户完全离开时,播放和下载都暂停。所以系统也应该区分这种情况,于是就有了onPause和onResume来表示半离开和从半离开恢复。值得注意的是,Android中全离开包括了半离开,半离开不包括全离开,什么意思呢,就是即便是全离开,系统也是先调onPause再调onStop,从全离开中恢复,也是调了onStart后还会调onResume,而对于第一次进入,onCreate、onStart、onResume会被依次调用,所以记住,只要用户进入,无论是怎么进入的,都是调用onResume,在这里恢复播放是再适合不过的了。还有一个onDestory也说一下,就是在销毁的时候被调用,一般是回收资源或按了返回键会被销毁。现在清楚了,也顺便看一下Android官网的这张图吧:


    然后,你可能好奇系统是怎么调用到你写的onCreate方法的,有兴趣的可以查看源码的frameworks/base/core/java/android/app/ActivityThread.java,此类里面有许多handle***Activity方法,如handleResumeActivity,不过这不是本文章讨论的重点,后续有可能另写一篇讨论。

    下面我们来讨论一下Activity这个类吧,我估计很多人都忽略了Activity类也是一个类,它也可以有构造函数,你还可以在构造函数里初始化一些东西,不过请注意,Activity的onDestroy被调用时,Activity这个类本身还没有被销毁。还一点也很少人忽略,我常问应聘者Activity之间怎么通信,他们一般都会说Intent或AIDL,如果两个Activity是同一个应用的,一般是运行在同一进程中的(除非你在AndroidManifest里配置了让它们不运行在同一进程),而且一般是同一线程的,所以最简单的通信方法,莫过于在A Activity中写一个方法,让B Activity来调用,你再懒一点,直接访问变量都可以,只是风格不好。

    其它,还要说明的是,一个Activity包含了一个Window,Window才是真正代表一个窗口,也就是说Activity可以没有Window,那正好是Service了,论据就是刚刚说的ActivityThread类,他的职责包括处理Service,(ActivityThread不是Thread的子类,但他描述了主线程要做的事,具体本文暂不讨论)。Window包含了一个DecorView,这才是真正的界面元素,它是整个View树的根,你可以试试在Activity里调用下面这句代码把整个界面染红:

    getWindow().getDecorView().setBackgroundColor(Color.RED);


    另外,还有一个ViewRoot,这个和DecorView经常有人搞混,首先是它对应的类的真正名字是ViewRootImpl,然后,他不是一个View,即他不是View的子类,他的工作与视觉元素无直接关系,但他确定Android View系统的一个重要类,它是负责通信的,如果你知道bridge设计模式就好理解了,这就是一个活生生的例子啊,不过不知道也没关系,不会阻碍对下文的理解,负责谁跟谁通信呢,是负责你的WindowManager与WindowManagerSerivce之间通信,整个系统的窗口都是由WindowManagerSerivce管理的,因为所有窗口的Z-order,事件分发,都要由一个中枢统一管理才可能有秩序,这就是WindowManagerSerivce的职责了。这样说,你肯定不能完全理解,要理解还是看代码吧,路径:frameworks/base/core/java/android/view/ViewRootImpl.java。其中有一句:

    mOrigWindowType = mWindowAttributes.type;
                        res = sWindowSession.add(mWindow, mSeq, mWindowAttributes,
                                getHostVisibility(), mAttachInfo.mContentInsets,
                                mInputChannel);

    就是向WindowManagerSerivce注册了一个输入事件处理监听器mInputChannel,具体实现可以写一篇很长的文章,暂不讨论。

    这就是与Activity主要相关的信息,希望本文加深了你对Activity的理解。


    参考资料:

    官网指南:http://developer.android.com/guide/components/activities.html


    转载于:https://my.oschina.net/yanquan345/blog/204193

    展开全文
  • 软件的本质是什么

    2020-12-31 15:41:06
    软件的本质是什么? 软件的本质是人的思想逻辑。因为对于cpu而言,无非只会做两件事:读取机器指令和执行机器指令。机器指令是最低级指令,可以直接被硬件数字电路识别和执行。机器指令适合硬件数字电路,但不适合人...

    软件的本质是什么?
    软件的本质是人的思想逻辑。因为对于cpu而言,无非只会做三件事:取址、译码、执行,这是一个指令的执行过程,所有指令都会严格按照这个顺序执行。对于特定型号的cpu,在出厂时其自身携带的指令是固定且有限的。机器指令是最低级指令,可以直接被硬件数字电路识别和执行。机器指令适合硬件数字电路,但不适合人的理解和记忆。为了更高效地控制硬件数字电路,我们最初创造了汇编语言。汇编语言是一种低级语言,它是面向硬件数字电路进行软件设计和开发的。但是,汇编语言并不能直接被硬件数字电路识别,它需要被事先被存放在机器里的汇编程序汇编成机器指令,然后交由硬件数字电路识别和执行。
    紧随汇编语言之后,我们创造了面向过程的语言,一种比汇编语言更适合人理解和记忆的高级语言。使用这种语言进行软件设计和开发时,我们不需要再去和硬件数字电路打交道了,因为它会被编译成机器语言后交由硬件数字电路识别和执行。实际上,在高级语言被编译的过程中,往往需要把高级语言先转化为汇编语言后再转化为机器语言,那么这整个过程叫做编译,也就是说对于一部分高级语言,编译的过程包含汇编的过程。
    在面向过程语言后,我们又创造了面向对象的高级语言,这种语言更加接近我们的真实世界。使用这种语言进行软件设计和开发,不仅更加高效,而且能设计和开发出性能更加优秀的软件。
    面向对象的语言中,最杰出的代表当属Java语言。通常,我们用Java语言设计和开发了一个程序,把它翻译成Java字节码后在JVM中启动和运行,就会产生一个进程,通常这个进程又称之为JVM进程。注意,进程和对象不是同一个概念。在一个进程中,包含至少一个对象(main对象),因为我们设计和开发的程序中可能不止存在一个类。再进一步来理解框架,通常一个框架(比如hdfs、yarn等)在启动成功后,会产生多个进程。因此,框架的本质就是类的集合。使用框架进行软件设计和开发,可以更进一步地提高开发效率和软件性能,因为很多通用和基础的类都不需要我们设计和开发了,直接从框架里拿来使用就可以了,我们因此可以更加专注于核心业务的设计和开发了。
    到这里为止,如果认为软件就是框架,那就大错特错了。并非所有的软件都是面向过程的,语言和框架只是软件设计和开发的工具,而并非软件的本质。软件的本质是人的思想逻辑,更进一步地讲,处理数据的逻辑。数据处理无非包括几个方面:数据加工计算、数据格式存储、数据格式传输。在学习各种软件技术时,不要忽视这一方面,但是,处理数据的逻辑才是本质!
    软件和硬件之间的关系:硬件是软件产生的基础和依据,软件的出现是为了更好地管理和使用硬件。比如:数据结构有很多种,归根结底就是为了更合理地将数据组织并存储在内存中。又有,为什么会有进程和线程?那是因为在早期只有一个CPU的情况下,一个CPU在一个时间点上只能运行一个程序。程序多的时候,如果还是排队执行,那CPU的执行效率就很差。于是,人们就发明了进程这个思想,使用进程的方式来管理多个程序,可以显著提高CPU的利用率,后来觉得还不够,又发明了线程。上述两个例子,一个本质上是针对数据存储,另一个本质是针对数据计算的。归根结底,还是软件和硬件之间的关系,即硬件是软件的基础和依据,软件的出现是为了更好地管理和使用硬件。
    最后,作为软件应用开发人员,通常应当把技术定位为工具,只需按照技术文档像使用产品说明书一样理解技术即可,坚持看到什么就是什么。除非有必要,否则不应该去深究技术的背后逻辑,应重点放在业务设计和开发上。

    展开全文
  • 爬虫的本质是什么

    2019-10-03 21:51:39
    很多搞爬虫的总爱吹嘘分布式爬虫,仿佛只有分布式才有逼格,不是分布式简单不配叫...爬虫的本质是网络请求和数据处理,如何稳定地访问网页拿到数据,如何精准地提取出高质量的数据才是核心问题。 分布式爬虫只...

    来源于:http://www.sohu.com/a/168371748_714863

     

    很多搞爬虫的总爱吹嘘分布式爬虫,仿佛只有分布式才有逼格,不是分布式简单不配叫爬虫,这是一种很肤浅的思想。

    分布式只是提高爬虫功能和效率的一个环节而已,它从来不是爬虫的本质东西。爬虫的本质是网络请求和数据处理,如何稳定地访问网页拿到数据,如何精准地提取出高质量的数据才是核心问题。

    分布式爬虫只有当爬虫任务量很大的时候才会凸显优势,一般情况下也确实不必动用这个大杀器,所以要明确你的目标是什么。

     

     

    --- 个人认为目前很多公司因为只有一到两条宽带(因为办公的宽带太贵了),也就是说爬虫只有一个网络出口,出去的ip是固定的,所以说要去搞分布式爬虫的公司,都是在装逼扯淡。作为程序员我们仅仅能提高的是抓取网页的速度而已。

    转载于:https://www.cnblogs.com/xuchunlin/p/8667915.html

    展开全文
  • “生活的本质是什么?这仿佛是一个类似于哥德巴赫猜想的问题。人类的思想是好奇心与求知欲的混合,驱使我们去探索去思考。塞斯·诺特博姆在《流浪者旅店》中说:“万物皆源于变动,而与恒定不变无关,如果一切的...

    “生活的本质”是什么?

    这仿佛是一个类似于哥德巴赫猜想的问题。

    人类的思想是好奇心与求知欲的混合,

    驱使我们去探索去思考。

    塞斯·诺特博姆在《流浪者旅店》中说:

    “万物皆源于变动,而与恒定不变无关,如果一切的起源是恒定不变,则必回归其本原,而其本原正是虚无。所以旅程永无终止。”

    而我们,也就在这趟无终止的旅行中,去追寻生活本质的意义。

    一、印象

    当你走进“家禾”,古色典雅、清新自然、含蓄内敛映入你的眼帘。

    工业化的年代,越贴近自然的东西,越有古拙的趣味。

    而当你深居于此,就仿佛独立于人世之外,在微醺的风中,听自然的交谈。

    这种趣味,仿佛回到了别具风韵的明清时期;

    低调内敛,简约大气,曲水流觞,

    自然与诗句相合,雕琢出最原始的美感。

    二、舒适

    深浅不一的灰色调,简单、低调却充满层次感;

    和谐有序的布局,昏黄的灯光,使得整个空间不会显得太过暗淡有多了一份舒适。

    这种融合让让人获得一种放纵而奢侈的平静。

    昏黄的灯光在短暂的时间中遨游,让你人生突然获得了一个完整的定格。

    三、生活

    生活并不是繁复的做加法,有时去繁求简。

    让生活回归居住本身,而不是不加克制地去放大物质欲望,才是让自己获得幸福快乐的秘诀。

    这里使你更贴近原本的生活,当你离开的时候,你我都会变成故事的编织者,共同叙述在这里度过的寻常时光。

    其实,当你真正的走入生活本身

    当你清晰地了解自身的追求后

    你才会发现

    这才是真正的生活的本质

    他们却不了解,你心中的生活状态

    不过只是

    你更善于关注生活本身而已

    展开全文
  • 原标题:万有引力的本质是什么?答案:以目前人类认知来看,万有引力的本质是时空扭曲,时空就是时间和三维空间。万有引力定律的发现牛顿利用自己的微积分思想和总结了开普勒三定律后,发现了万有引力定律。1687年,...
  • 本文转载自:epoll 的本质是什么?,原文链接:https://my.oschina.net/editorial-story/blog/3052308#comments原文作者:编辑部的故事-罗培羽 epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的...
  • Serverless基本思想是程序员只需要写代码然后推送到Serverless服务就足够了,其余事情都由这个服务来处理 Serverless直译为中文“无服务器”,但是实际上它仍需要服务器,只不过服务器管理以及资源分配...
  • 这些在RxJava迭代了这么多个版本之后,这些特性,没有减少,反而大大的增强了,这个特性,就是响应式编程,那么接下来,就来讲讲RxJava为什么会有这种特性,以及带来其特性不变的本质是啥! 本文主要讲解RxJava的...
  • ★《技术的本质复杂性科学奠基人、首屈一指的技术思想家、“熊彼特奖”得主布莱恩•阿瑟所创建的一套关于技术产生和进化的系统性理论,本书打开“技术黑箱”的钥匙,它用平实的语言将技术最本质的思想娓娓道来...
  • 两个结局不同的人,究竟最大的区别是什么?我以为是思想,造成不同结果的本质原因是他们的思想,是他们做事的习惯.日积月累,造成他们最后截然不同的命运![@more@] ...
  • 众所周知,C++STL实现了很多算法,这些算法给程序员带来了很多方便,一般情况下,如果你项目没有特殊要求,采用这些算法...但在享受着它给你带来便利同时,你是否想过这背后设计需求是什么吗?你是否...
  • 入党思想汇报内容是什么思想汇报是申请入党人为了使党组织更好地了解自己的思想情况,自觉地争取党组织帮助教育,用书面形式向党组织汇报思想时所写书面材料。具体内容应根据每个人情况而定。 (1)...
  • 现代管理学之父彼得·德鲁克(Peter F.Drucker)管理思想的精髓被总结为“1358”,即管理的一个定义、管理的三大任务、管理者的五项工作和企业需要设定目标的八大领域。 1 管理的一个定义 “管理就是界定企业...
  • 使用错误PPT模板主要原因是什么?怎么打破它? 使用PPT模板实际上并不是一件有罪事情,但如果你使用它... 我们想要使用模板,我们必须知道幻灯片模板是什么,它是如何生成,以及它设计思想和我们创建...
  • 也可以说,云原生一种设计思想,以这种思想为指导设计出来软件。首先,天然就“生在云上,长在云上”;其次,能够最大地发挥云能力,发挥出云最大价值。云原生为“云”量身定做。我...
  • 很多人都不希望自己被看成“伸手党”,被人瞧不起,所以遇到困难总想办法自己解决,不敢或者说不愿意请求别人帮助。这么想到底对不对?我们遇到了困难,到底该不该向别人求助呢?...下面这本书传达核心思想: ...
  • Pascal设计者Niklaus Wirth一本著作书名,它刻画了过程式尤其结构化编程的思想。后来Robert Kowalski进一步提出:算法=逻辑+控制。其中逻辑算法核心,控制主要用于改进算法效率。在逻辑式编程中,...
  • MES的本质到底是什么? 1)一套生产现场的综合管理的集成系统。用集成的思想替代原来的设备管理、质量管理、生产排程、DNC、数据采集软件等车间需要使用的孤立的软件系统。 2)MES在信息化系统中具有承上启下.....
  • 因为从网上搜索"索引失效原因"时,要么一些片面总结性用语,例如"如果条件中有or,即使其中有条件带索引也不会使用",要么就是对着一些例子搭配explain进行笼统解释。导致我经常看过就忘,究其根本原因就是...
  • 如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间区别是什么,那么就花费一点时间来研读一下这篇博客,你一定会有很大收获! 一、面向对象与面向过程区别 面向过程就是分析出解决问题所需要...
  • 摘要思想实验在本质上究竟是什么?从思想实验与经验关系着手展开分析,可以找到一个令人信服答案。有关思想实验与经验关系主张,在科学哲学史上存在着经验论与先验论两种相互对立观点。以纠缠实验为例,该...
  • SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。 正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI ...
  • 听后确实思路有所开阔,但又不禁想:为什么类似分享/大会几乎很少有人专门讲测试思维、测试本质之类的思想。各个公司,各个业务,几乎都有相似测试方法,而不同的是具体测试实施、以及不同业务实现测试;...
  • 浅谈Seo优化本质思想

    2012-08-15 16:50:14
    贝佳网认为SEO要做好,首先要先弄明白搜索引擎的本质是什么,他的价值观是什么?首先搜索引擎是商业公司,最终也一定是要盈利的,所以搜索引擎的本质还是商业,那搜索引擎如何才能赚钱?很简单,也是要占领市场,...
  • 这本书作者斯蒂芬·平克(Steven Pinker),他善于透过语言这扇窗户,结合人类学、心理学和认知学来解读世界和人性本质。 全人类似乎都有一个共同焦虑:人性如果有规律,那么,人的思想和情感就没有办法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,650
精华内容 660
关键字:

思想的本质是什么