第一篇:国泰安培训学习心得
培训学习心得
通过这几天的时间,我学习了公司的简介、企业规章制度、营销部经理岗位职责,企业文化、销售六步九问、时间管理法、CEO思维等内容。让我在最短的时间里了解到了公司发展历程、企业精神、企业文化、公司对人员的岗位要求,同时我也学习到了一些公司销售环节总结下来的精髓,领会到陈总对我们的期望,那么我来与大家分享一下我学到的重要内容:
一、企业文化
企业文化是一个企业的精髓,是需要流淌在我们每个人的血液中的。需要我们有效的传承。正诚爱的国泰安精神让我们走到一块,组成了一个团结友爱,互帮互助,公平公正的大家庭。我们将相互扶持走向美好未来。激情、踏实、创新使我们事业成功的基础,这三项有事业心的人缺一不可,在工作中我们拥有了激情、踏实和不断的创新你会发现自己工作会非常顺利。超越、卓越,让我们不多的积极进取,总结自己,修正自己,超越对手,超越自己。公司的企业文化是航海中那明亮的灯塔,照亮我们前行的方向。创造一个伟大的公司,一个百年企业,为中国的教育事业做贡献。
二、时间管理法
上帝是公平的,每个人的时间是一样的。为什么有的人有限的时间做了很多事,而有些人却碌碌无为呢。这就体现了时间管理的重要性。每周每天都要做总结,总结有没有按照计划实施工作,实施的效果好不好,没有实施到位怎么改正。对下周的工作怎么规划,ABC时间管理法非常重要。陈总的时间管理法让我对时间管理有了切实有效的方法,我会在以后的工作中认真施行。
三、CEO思维
我工作时间也有六七年了,从来都是干好自己手头的活别的不会去多考虑。但是看了陈总的CEO思维后我才感觉到为什么我这几年的工作没有一个大的提升,就是我自己的高度、广度、深度不够。没有把自己放在一个重要的位置上去看待,自己都没有看重自己还怎么让领导看重自己能。作为企业一名基层工作者,前进的路还很漫长,需要学习的必然也很多,踏实工作、努力提高自己各项技能,做一名管本行、议大事、懂全局的新时代轻年。以一个CEO的精神严格要求自己。
四、销售六步九问
这是公司很多前辈通过与客户不断的接触、尝试总结出来的通往成功的过程的总结。付出了很多汗水,是智慧的结晶。
要是我们在实际应用中能够严格按照这个流程操作,甚至能够拓宽的更细致,那么操作过程将得心应手,事半功倍。在这个过程中就是体现我们对待工作踏不踏实最好的体现,不够踏实就不能够细致的了解院校的基本及深层信息。
这个操作步骤明确了我们的工作内容,清楚要干什么,怎么干,做到什么标准。中期如何发掘客户的需求,客户的想法,展示我们公司的实力、公司的能力、公司的长处、公司增值服务的优势。建立公司主导地位,赢得客户的关注,赢得客户的信任。
第二篇:《安规》学习心得
《安规》学习心得
——————————胡仲
安全对于每一个人来说都是那么的重要,安全这个话题一直来也都是那么的沉重与严肃。而安全对于从事电力工作的每个人尤为显得迫切,必须时刻保持警惕。电力行业对于安全生产这方面更是常抓不懈,作为一个新员工的我从学校到电建公司再到双峰农电都在学习《安规》。“安全第一,预防为主”的观念已经深种脑海,而每年的安全活动则时刻提醒我们要牢记安全生产血和泪的教训,拒绝违章操作和违章指挥,杜绝一切悲剧事故的发生。我们学习安全手册,只有认真贯彻执行;我们要清楚开展一项工作时,具体每个环节的流程,先干什么、再干什么、后干什么、具体应该怎样干。“细节决定成败”。工作现场的每一个不起眼的细小失误都有可能是点燃事故的“导火线”。所以,我们要加强工作现场的安全监督,要认真履行自己的职责,对工作现场的每一个细节都要监督到位,随时提醒,纠正不安全现象。对于工作现场安全措施不完备,应立即停止其工作。对于工作现场的违章现象,通过教育、纠正等手段,保证工作现场安全的落实。
通过学习,让我们对安全生产知识有了一个新的认识,对自己的行为规范有了更高的要求。我们要使《电力安全工作规程》成为我们的自觉行动和良好习惯,坚决克服各种麻痹思想和侥幸心理,坚决杜绝各种违章不安全的行为,培养“一切按规矩办”的意识,做到:反违章从我做起,从小事做起,从一点一滴做起,从现在做起,关爱生命,远离违章;每个安全责任人100%严格按照《安规》办事。
目前安全生产局面相对稳定,但现实提醒我们,安全生产工作还有许多不足,因此我们每一个员工多不能高枕无忧,一定要不断改进自己的工作行为和习惯。更重要的就是平时的业务学习不能放松,通过学习能发现自己的不足,通过实践能弥补自己的不足,通过平时的实际工作来提高自我的技术水平和综合素质,提高实际操作能力和处理事故能力;来确保人身、电网和设备的安全。
第三篇:安全月学习心得
安全心得体会
安全对于每个人来说既是非常重要却又容易令人忽视,安全顾名思义,无危则安,无缺则全。安全就是要以人为本,就是要爱护和保护好自己以及他人的生命及财产的安全。从其他角度上来讲,安全不仅是牵扯到自己也牵扯到别人。而且还会危及到其他人,自己出了事会抱憾终身。由于自己的失误而导致其他人的生命受到伤害或者死亡,说严重点这就是犯罪,要追究法律责任的。从道德上来讲的话,你自己的心理也会感到不安,感到愧疚的。
通过学习,现体会如下:
一是,所有的安全事故是可以防止的。安全事故是可以防止和避免的,每次事故的发生都有它的原因,我们从事故的根源入手,釜底抽薪,切断事故发生的条件,这样我们就可以防止事故的发生。这样就需要企业建立安全事故数据库,对各类安全事故进行分析总结,举一反三,将他人的事故作为我们的事故,从中吸取教训,避免事故发生。
二是,各级管理层对各自的安全直接负责。安全要引起足够的重视,就必须建立一把手的负责制度,奖罚分明,他必须对自己管辖范围内的安全生产负责,这样就会给他们足够的压力和动力。
三是,所有安全操作隐患是可以控制的。每种设备都有其操作规程,违反了其操作规程就可能对设备造成损坏甚至发生安全事故,也就是发生了违章行为。因此,在操作中必须按照操作规程进行。操作规程不能是一纸空文,必须有监督机制使其贯彻实施。
四是,员工必须接受严格的安全培训。安全培训是使员工了解和掌握安全知识的重要途径,首先你要让你的员工知道怎么做是安全的,怎么做是不安全的,这样他们才会知道应该做什么,不应该做什么,我怎么做企业才会对我认可,怎么做会危害企业的安全生产。
五是,发现安全隐患必须及时更正。经过安全检查后发现了问题后必须及时整改,降低其演变为安全事故的可能性,如果发现了安全隐患不去整改,那么,我们根本就没有必要浪费人力物力去检查。所以安全隐患的整改必须及时彻底。
我觉得人们最重要还是要有一个很好的安全意识还要提高安全技能,其实在现场的安全设施那些对于人们来说它们都是死的,而使用它们的人是活的。所以提高安全的主观能动性和安全技能自己才能真正的得到安全保障。篇二:安全月学习心得体会
安全生产心得
——技改工程部
通过学习《贵州珍酒酿酒有限公司安全生产制度汇编》、《贵州珍酒酿酒有限公司安全标准化管理手册》以及《贵州珍酒酿酒安全文明施工制度》ppt,让我们再次了解安全生产、文明施工的重要性。特别是在6·2伤亡事故发生后,对公司及个人造成了重大影响,更重要的是为此付出惨痛的代价。安全是一个永恒的话题,对于我们在施工前线的员工来说,安全也是根时时崩紧的弦,一点点的疏忽就会带来“血的教训”??。所以要让安全记在心中,把安全放在首位。
珍酒公司的安全生产的方针是“安全第一,预防为主”,而安全对我们来说非常重要,不仅涉及到整个公司更影响到施工质量,时刻保持安全意识,深刻体会安全责任的重要性。“前车之鉴,后事之师”安全生产文明施工是重中之重,杜绝事故发生,将一切安全隐患消除在源头。“千里之堤,溃于蚁穴”在工作中一个很小的疏漏,就带来无发预计的重大事故。我们应该从零开始,并且做到零事故的发生,以足够的信心去战胜它,并且积极参加安全教育培训和学习,提高自身的安全意识,杜绝违章操作,远离事故,让安全文明施工成为我们的习惯,让我们的行为更加安全。
在呼吁安全生产的现在,安全是发展的主题、基础、命脉,没有安全就谈不上稳定,发展。工作环境的好、坏,员工的安全意识强、弱,直接影响到企业的发展。由于某些人不注意安全,不讲安全,不 懂安全,意识淡薄。把我们的安全操作规程,文明施工制度不放在心上,使安全文明施工是“天方夜谭”。然而一起安全事故的发生对于一个工厂,一个家庭说,损失是惨重的,无法估量的,是一个不能弥补的灾难,这些惨痛的教训,让我们永远无法忘记。
为了个人的安全,家庭的幸福,让我们从自己做起,从小事做,把安全文明施工作为首要任务来做,认真做到“每一天都是新年的开始”,让安全时刻伴随着企业的发展,家庭的幸福,社会发展和进步。
6月是安全生产月,公司营造“安全管理,人人有责”的浓厚氛围;树立“安全为天”的思想,创建“人人管安全,人人要安全”的和谐企业,突出“安全责任,重在落实”的活动主题。让我们的员工提高对安全生产认识的同时也理解加大安全检查力度必要性,让我们共同努力创建一个安全的工作环境。篇三:6月安全月学习心得
6月安全月学习心得
——技改工程指挥部
从6月1开始的为期一个月安全月学习,通知各种形式的学习,现场参与,深刻感受到安全的重要性,企业成于安全,败于事故,任何一起事故对企业都是一种不可换回的损失,对家庭、个人都是无法弥补的伤痛,所以安全思想牢牢扎要在每个心中,让每个人都能掌握安全知识,人人都能当安全员。
公司这次安全月学习不搞形式上的安全,追求内容上的真实。制订一系列的学习计划,安全生产“十个一”的活动方案从开始,就用细致有效的规定,将6月安全学习月的各项工作、学习、计划分解落实到部门、个人,杜绝了只在形式上讲安全,应付检查,那么即使投入再大付出再多,安全环境也不能得到本质改善,安全管理水平永远不能得到本质提升!只有每个职工在每天的工作中自我监督、自我检查,查找漏洞和薄弱环节,防止不安全的因素存在。从小事做起,点点滴滴汇集在一起,才能筑起安全大堤。
基本上每一次事故都是由于疏忽造成,视危险为平常,违反操作规程,不能清楚地认识到违章就是走向事故,就是伤害自己、伤害他人,甚至走向死亡。认识到违章的重要性,就不会抱有任何侥幸心理。我还深刻地领悟到:或许一次不经意的违章,造成大的伤害或损失,就变成了违法。让我们正确认识到安全不是一个人的问题,而是你中有我我中有你,是一个上下关联人人互保环环相扣的链,是一张错综复杂紧密相连的网。
无危则安,无损则全。安全就是人们在生活和生产过程中,生命得到保证,身体免于伤害,财产免于损失。安全生产是我们管理的重点,是我们发展的根本保证,安全就是效益。首先武装好自己,熟知熟会各项操作规程安全制度,认真学习安全有关法律法规;其次,养成良好的安全操作习惯,杜绝习惯违章,敢于同身边的甚至是上级的不安全行为较真儿;再次,勤于检查,及时发现整改事故隐患。要从戴好安全帽,扎好安全带,穿好工作服,开好作业票等这些小事做起,持之以恒。篇四:安全月学习心得
安全生产,时刻牢记
--安全生产月学习心得
如果说企业的存在是为了追求效益,那么安全生产就是企业最大的效益,安全生产乃立业之本。对于企业广大职工来说,重视安全生产是我们义不容辞的责任和义务,保证自己在正常生产过程中不受伤害,是对企业负责,更是对自己和家庭负责。安全不是一个人的问题,而是你中有我,我中有你,是一个上下关联、人人互保、环环相扣的链,是一张错综复杂、紧密相连的网。
安全生产是企业每一名员工的护身符,谁忽视了,就等于飞蛾扑火,让你付出血的代价。事实上,我们每个人都明白安全意味着什么,然而安全也是最容易被人忽视的。在我们日常工作中,因抢时间、赶工期,而忽视、忘记安全生产规程;对自己的熟练过分自信,心存侥幸,麻痹大意;逞强好胜,表现为胆大妄为的冲动,明知故犯;因为身体疲倦,精神松懈,注意力分散而顾不上安全生产规程等。一桩桩血的教训反复证明:侥幸和疏忽大意是造成安全事故发生的重要因素。
安全生产是我们工作的基石,更是我们生命健康的保障。“千里之堤,溃于蚁穴”,当存在微小的安全隐患时,如果不给予足够的重视和正确及时处理,就会留下无穷的后患。事故不难防,重在守规章;最大祸根是失职,最大隐患是违章。只要我们真正把规章制度、操作规程当成生命之友,安全之伞,把慎密的思想落实到严谨的行为中,谨于思,慎于行,就能够站在安全生产的主题地位上,实现安全生产。
“天下难事,必作于易;天下大事,必作于细”。每一次事故的发生,总在于疏忽与大意;每一次事故的背后,总留有许许多多的懊悔与哀伤。“他山之石,可以攻玉”,我们要在哀思中反思,在反思中牢记。只要人人在思想上时刻牢记安全,在行为上处处严加防范,我们就一定会营造出安全和谐的氛围,平安之花才会盛开的更加长久鲜艳。
前进民爆栾川分公司:冯小超篇五:安全月学习心得
建筑企业安全月学习心得
在建筑行业中,安全生产尤其重要,要保证生产安全,就必须加强安全生产管理的学习,增强安全理念。因此安全生产的培训至关重要。通过这次安全月学习,有以下感想:
一、增强安全生产意识,提高做好安全工作的紧迫感和责任感。
安全生产人命关天,做好安全生产工作,不仅关系到人民群众的生命和财产安全,而且关系到国家经济发展和社会进步。搞好安全生产工作,对我们建筑施工行业广大干部、职工来说是责无旁贷。在建筑工程施工管理过程中施工企业不能存有片面追求经济利益、急功近利的错误思想,不能置人民群众的生命、国家财产安全于不顾。违章指挥、冒险蛮干,致使安全生产事故不断发生,在施工管理过程中管理人员在遵章守法,及时制止一些安全意识淡薄的管理人员和操作工人违规行为。安全生产制度不只是挂在嘴上,写在纸上就可以的,是要所有相关人员共同落实在行动上的。作为建筑施工企业领导的,安全生产工作一定要深入,不能只是“蜻蜓点水”的表面工作。每天忙忙碌碌工作,但是工作要抓到点子上,要安排研究安全生产的时间,要保证安全投入的资金,要健全安全机构充实人员。建筑企业的安全生产问题不是穿衣戴帽的形象问题,更不只是哪些分管领导或安全部门的事,要知道增强安全意识靠的是教育,抓好安全靠的是落实。对安全生产工作充满责任心,时刻保持紧迫感。
学习建筑企业的安全管理要与学习《建筑法》、《安全生产法》相结合 要明确学习建筑企业的安全生产管理,就是为了解决建设工程安全生产实践中突出存在的问题。安全生产管理是对《建筑法》、《安全生产法》的规定进一步细化和具工作的落实。通过学习“两法”,可以加深对建筑企业安全生产管理内涵的理解。建筑企业的安全生产管理涵盖范围要广、制度要明确具体,可操作性要强,处罚力度要大。加强企业员工全面深入地学习安全生产,研读领会法规原文,把握其基本原则,掌握其中规定的各项制度,是更好贯彻落实建筑企业安全生产的基本保证,也是从源头上消除事故隐患,遏止建筑施工安全生产事故的具体措施。抓安全生产,一定要杜绝六种倾向,进一步摆正安全生产的主导地位。
1)杜绝顾此失彼,不能抓质量进忘了安全,抓进度进不顾安全。2)不把安全生产当做永恒的主题,认为是老生常谈,思想麻痹,往往事故就会钻了思想麻痹的空子。3)杜绝形式主义,热衷于上传下达,讲得多,做得少,只打雷,不下雨,责任不到位,检查不及时,措施不得力。4)杜绝弄虚作假,出了事故隐瞒不报,不分析原因,不追究责任,不制订防范措施,或大事化小,小事化了。5)杜绝金钱至上,有的企业只为赚钱,不顾员工的身体健康和生命安全,该添置、配备的安全设施不配备,该发放的劳保用品也不发,有些已经老化的电线了还更换,这就给事故留下隐患。6)杜绝有法不依,国家有关安全生产的法律、法规、条例、规范,都是安全生产中必须执行的,也是做好安全生产的保障,我们要认真学习,熟练掌握,知法懂法,依法进行施工生产,决不能敷衍应付。
二、认真贯彻执行安全生产制度与措施。对减少事故隐患,防止事故发生,有着
重要作用。
建筑企业安全生产管理要进一步明确施工企业的六项安全生产制度,即安全生产责任制度、安全生产教育培训制度、专项施工方案专家论证审查制度、施工现场消防安全责任制度、意外伤害保险制度和生产安全事故应急援救制度。贯彻执行这些制度,就能确保企业的安全生产,有了制度的约束,就能使企业的管理工作健康有序的发展。建立及健全安全生产制度,反映了一个企业的整体素质的高低和职工的技术水平。
三、监理单位是建设工程安全生产的重要保障。
(一)在建设工程现场,监理单位能够发挥安全监理的作用。我们知道,安全生产是一项系统工程,涉及的因素很多,工程建设参建各方的安全行为都应当符合法律、法规、规章和市场准则。要做到这一点,仅仅依靠自律机制是远远不够的,工程监理单位由于直接参入了安全生产的全过程,因而,可能在建设工程安全生产实施过程中对参建各方的安全生产行为进行约束。特别是,工程监理企业可以依据委托监理合同和有关建设工程合同对承建单位的安全生产行为进行监督管理,由于这种约束机制贯穿于工程建设的全过程,可以采用事前、事中和事后控制相结合的方式,因此,可以有效地规范各承建单位的安全生产行为。最大限度地避免安全事的发生,即使出现承建单位拒不整改的情况,工程监理单位必须依照法律、法规和工程建设强制性标准实施监理,并及时向有关主管部门报告,由政府部门采取强制措施,避免重大事故的发生。
(二)客观条件要求监理单位、必须发挥安全监理的作用。政府建设行政主管部门是安全生产的监督管理机构,他们在安全生产管理中的作用是任何单位都不能取代的。安全监督管理,这是最基本的约束,也是政府的主要职能之一。但是,由于客观条件所限,政府的安全监督管理不可能深入到每一项建设工程的生产过程之中。这就要充分发挥监理单位从业监理人员的监理职责,严格审查施工组织设计中的安全技术措施或者专项施工方案是否符合工程建设强制性标准。对安全技术措施,必须逐条审查,一丝不苟。对危险性较大的分部分项工程,比如:模板工程;起重吊装工程;脚手架工程;拆除工程等,应当审查其专项施工方案和安全验算结果。而充分发挥监理单位注册监理执业人员在安全生产中作用就显得尤为重要。
(三)现实中对安全管理法规执行不力的现状,要求监理单位必须发挥作用。由于有的建设单位对建设工程法律、法规以及强制性标准的认识模糊。这就要求工程监理单位在实施监理过程中必须善于发现安全隐患,及时要求施工单位整改;情况严重的,应当要求施工单位暂时停止施工,并及时报告建设单位,施工单位拒不整改或者不停止施工的,工程监理单位应当及时向有关主管部门报告。另一方面,有的建设单位为追求利润最大化,而频频出现不顾安全的行为等等,这些都要求监理单位应当及时向建设单位提出建议,这对规范建设单位的安全行为也可起到一定的作用。
建设工程的施工现场,存在有许多危险因素,高处坠落、坍塌、物体打击、触电、机械和起重伤害都是对建筑施工企业职工的严重威胁,在制定安全生产的制度措施时,我们一定要本着对人民群众高度负责的精神,树立尊重人、关心人、爱护人的观念,要从维护社会发展和稳定大局出发,认真贯彻党中央、国务院决策、对查出的重大隐患要盯住不放,一抓到底,鼓励员工对本企业的安全工作提出批评建议,员工有权拒绝违章指挥和强令冒险作业,各级管理人员为工人的安全生产创造良好的环境,建筑施工企业的安全生产事故多发的势头就会得到有效的遏制。
第四篇:安全月学习心得
安全月学习心得
一年一度的“安全月”活动在我厂的精心部署、车间的精细组织下开始了,这次的“安全月”活动,首先从集团公司动员视频会议中,已对安全生产的重要性有了更深层的感悟,接下来学习了相关安全文件以及电力行业事故案例,下面谈谈本人“安全月”的心得体会。
损失惨重、令人震惊和心碎的事故一再告诉我们“安全生产”决不是一句简单警语。安全生产的本质是珍惜生命。电力生产事故容易导致社会性灾难,不仅人命关天,而且社会责任重大。虽然近几年,我厂在安全生产方面加大了物质和思想教育的投入,取得一些成效,创出不少新的成功经验,保证了安全生产基本稳定局面。但没有完全实现安全生产的可控和在控,仍然如履薄冰,胆战心惊。人祸大于天灾。对安全生产构成威胁的主要来源,是一些素质不高的员工和缺乏管理能力的干部。员工业务素质和安全素质不够,是生产岗位上的危险点。本来是要求通过人的努力来预防事故,结果是由于人的素质不够,不仅起不到预防作用,甚至会导致新的事故发生。作为生产的组织者,部分干部缺乏管理能力,更无法保证各项规章制度落实,难以形成有效组织约束,维持不住有效工作秩序,结果只能是带来无序和混乱,为引发事故埋下隐患和创造触发条件。如果素质不高的员工和缺乏管理能力的干部组合在一起搞生产,那无异于在弹药库里玩火,制造灾难。
一个员工不能满足岗位素质 要求,是自我人生价值的失败。自觉遵规守纪既是认同科学规律也能反映自我才识。应加强灌输这些观念,用来启迪员工的认知,激发心灵深处的认同和求进意识,体会生命的快乐与尊严。深入理解以人为本的内质,以人为本,是抓安全生产的出发点,同时也是安全工作落脚点,提高每一个员工的安全生产行为,就要从提高素质做起。从人的需求和环境营造深入研究,更加注意在细节上下功夫实践,那么安全生产的可控和在控是完全能够实现的。
检修三班
杜瑞祥
第五篇:安卓学习心得
Android学习心得
-----093380117
计算机应用(1)
张峰
1.关于Activity
1.在一个Activity中使用多个View
如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。首先,我们增加一个新的资源描述layout/second.xml。
除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。2.还是回到正道上,多个Activity之间的跳转
Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。
这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。
然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。
2.关于 Intent的使用
Intent分为两大类,显性的(Explicit)和隐性的(Implicit)。一般来说,intent要定位事件的目的地,无外乎需要以下几个信息: 1.种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。
2.类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。
3.组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后两个类实例。4.附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。
其实,如果是在一个应用内部,这种隐性的intent实在有点别扭,个人觉得,这种松藕合的实现方法,只适用于那些较大的系统或者多个不同的应用之间的调用,可手机上又有什么“较大”的系统呢?无非是可以与不同来源的多个应用之间方便地互操作而已,那么会是什么样的场景呢?比如,给QQ好友发送gmail邮件,用GoogleMap查找QQ好友所在的位置?看上去挺不错的。
关于这个ContentProvider,其实还有话说,它主要是的那些看似数据库操作的方法我们都没真正去实现呢。不过今天就到这里了,等下回再去研究吧。
3.关于ListActivity
准备一个List对象并借助Adapter就可以构造出一个列表。重载onListItemClick方法可以响应选择事件,利用第一个参数可以访问到这个ListView实例以得到选中的条目信息。这里有一点要说明的,就是如果更简单的话,其实连那个setContentView都可以不要了,Android也会自动帮我们构造出一个全屏的列表。但是本例中我们需要一个TextView来显示选中的条目,所以我们需要一个layout.mainb描述一下这个列表窗口。
这里需要注意的是那个ListView的ID,是系统自定义的android:list,不是我们随便取的,否则系统会说找不到它想要的listview了。然后,在这个listview之外,我们又增加了一个TextView,用来显示选中的条目。
再来说说这里用到的ArrayAdapter,它的构造函数中第二个参数是一个资源ID,ArrayAdapter的API文档中说是要求用一个包含TextView的layout文件,平台用它来显示每个选择条目的样式,这里的取值是R.layout.list_row,所以,我们还有一个list_row.xml文件来描述这个布局,相当简单。
从ArrayAdapter上溯到BaseAdapter,发现还有几个同源的Adapter也应该可以使用,象SimpleAdapter和CursorAdapter,还是做个例子来实验一下吧。
然后,在HelloTwoB中的onCreate函数中,修改代码,有几个不同:items的元素是HashMap实例,这是一点变化,然后构造函数除了要求items以外,还要求提供一个string[]来说明用hash表中的哪个字段显示在列表中,而后是一个资源ID的数组。
因为单纯的CursorAdapter是抽象类,所以我用的是它的子类SimpleCursorAdapter,很好理解,先用ContentResolver查询通讯簿得到一个游标,然后告诉SimpleCursorAdapter要用其中的People.NAME作为显示项来构造出一个adapter即可。4.关于Dialog
注意到android.app包下除了Dialog(可用于制作复杂的对话框)以外,还包括了几个系统定义好的对话框类,如DatePickerDialog、TimePickerDialog及AlertDialog。
其中AlertDialog我上回用过一次,基本上就那样子了,今天看看另外两个对话框的使用吧。
很简单的,无非是需要一个OnDateSetListener接口的实现而已,在它里面的dateSet方法中就可以得到选择的日期了。而TimePickerDialog与DatePickerDialog使用如出一辙。
看看另一个ProgressDialog的用法吧,这个类与AlertDialog一样包含了多个static的方法,所以使用起来是非常方便的。比如说,如果我们需要用它来表示一个长时间的操作。
5.关于Service和Notification
大略地看了一下android.app下的Service类,觉得它与Activity非常相似,只是要注意几个地方:
1.生命周期,Service的从onCreate()->onStart(int,Bundle)->onDestroy()显得更为简单。但是它的onStart是带参数的,第一个ID可用来标识这个service,第二个参数显示是用来传递数据的了。比较Activity,传递数据的Bundle是在onCreate就带进入的。
2.Service的启动由Context.startService开始,其实Activity或者Service都是Context的派生类。结束于Context.stopService()或者它自己的stopSelf()。
3.Service还有一个与Activity不一样的是它可以由另一个Context去绑定一个已存在的Service。就是这个方法Context.bindService(),被绑定的Service要求是已经onCreate了但可以没有onStart。在Service类中有个抽象方法getBinder()可以得到这个IBinder对象。关于这方面的细节,以后再看,这里只做个记录罢。
4.与Service有关的还有一个安全的问题,可以在AndroidManifest.xml中用
6.GridView与ImageView
简单一点吧,就瞧瞧那个Grid的效果,Android提供了一个GridView,不过从APIDemo中看来,它似乎与PC上的GRID差别还是挺大的,更像那个IconView的感觉。不知道Android中如何实现表格界面?虽然在移动终端上,表格一般不会有谁使用,大家似乎更倾向于使用ListView,而Android对于ListView则有更简单的实现ListActivity。
很简单,只要重载几个方法就可以了,关键是那个getView方法,它负责构建出每个单元格中的对象实例。这里我们构造的是一个ImageView实例。
然后就是同样的将这个Adapter赋给GridView即可,大家可以看看效果,注意在做这个例子前,先放几个小图片到res/drawable目录下,buildproject一下就可以得到那个R.drawable.a了(这里的a是图像文件名,如a.png)。
在getView方法中我们使用了ImageView类,这又是一个widget。除了上面用到的几个方法以外,还有以下几个方法值得注意: 与图像来源有关的方法,我们只用了资源文件的方式。
还是习惯性跑题了,其实,我是想通过我对这个类的无数次Debugger跟进,说说它的多线程异步处理的解决策略的。他的基本策略如下: 1.当你实例化一个AsyncQueryHandler类时(包括其子类...),它会单件构造一个线程(后面会详述...),这个线程里面会构建一个消息循环。
2.获得该消息循环的指针,用它做参数实例化另一个Handler类,该类为内部类。至此,就有了两个线程,各自有一个Handler来处理消息。3.当调用onXXX的时候,在XXX函数内部会将请求封装成一个内部的参数类,将其作为消息的参数,将此消息发送至另一个线程。4.在该线程的Handler中,接受该消息,并分析传入的参数,用初始化时传入的ContentResolver进行XXX操作,并返回Cursor或其他返回值。
5.构造一个消息,将上述返回值以及其他相关内容绑定在该消息上,发送回主线程。
6.主线程默认的AsyncQueryHandler类的handleMessage方法(可自定义,但由于都是内部类,基本没有意义...)会分析该消息,并转发给对应的onXXXComplete方法。
7.用户重写的onXXXComplete方法开始工作。
这就是它偷偷摸摸做过的事情,基本还是很好理解的。我唯一好奇的是它的线程管理方式,我猜测他是用的单件模式。第一个AsyncQueryHandler的实例化会导致创建一个线程,从此该线程成为不死老处男,所有的ContentResolver相关的工作,都由该线程统一完成。个人觉得这种解决方式很赞。本来这个线程的生命周期就很难估量,并且,当你有一个ContentProvider的请求的时候,判断你会做更多的类似操作并不过分。就算错了,花费的也只是一个不死的线程(与进程同生死共存亡...),换来的却是简单的生命周期管理和无数次线程生死开销的节约。同时另外一个很重要的问题,他并会涉及到单件中数据同步的问题,每个类都有各自的Handler类,彼此互不干扰,分发可以分别进行。当多个数据请求的时候,在同一个ContentResolver上进行的可能微乎其微,这就避免了堵塞。总而言之,这套解决办法和Android的整体设计算是天作之合了。
所以建议,如果你有什么非ContentProvider操作,却需要异步多线程执行的话,模拟一套,是个不错的策略,当然,具体情况具体分析,生搬硬套是学不好马列主义的。
7.显示控件使用
Android的界面显示同样也是基于控件的。通常是用View(包括ViewGroup)控件配上XML的样式来做的。具体细节不想说了,可以参考 Samples里的ApiDemos/View,和View的Doc,以及Implementing a UI这篇Doc。其他还有很多,感觉算是SDK讲述的最多的内容。
从控件的使用上,和网页的设计类似,尽量用parent_width之类的抽象长度,用Theme来做风格,抽取所有的字串等信息做本地化设计。相关内容参看Implementing a UI就好。
一类比较重要的是数据绑定控件。如果做过ASP.Net会从中看到很多类似的地方。一个支持数据绑定的控件,比如ListView。可以通过一个 ListAdapter绑定到一个数据源上。ListAdapter是一个抽象类,主要的实现类包括SimpleAdapter和 SimpleCursorAdapter。前者是绑定一个静态的Array,后者是绑定一个动态的Cursor。Cursor前面说过,是一个指向数据源的随机迭代器,将View绑定到Cursor通常要设置这样几个参数。一个是每一行的样式,称作Row Layout,其实就是一个普通的Layout的XML文件。还有就是一个列和现实控件的对应关系。那个控件显示哪个列的值,这是需要配置的。为了定制一个良好的数据显示控件,最简单你可以定制很PP的Row Layout,复杂一点就是可以重载绑定控件View,或者是适配器ListAdapter。如果是一个数据显示密集的应用,且你对UI有些追求,这个工作估计是必不可少的。
一个主要用于显示数据内容的Activity,可以选择派生自ListActivity。它提供了一个具有ListView 的Layout,还有simple_list_item_1, simple_list_item_2, two_line_list_item等默认的Row Layout,还有一些比较不错的API,和可供响应选择Item的事件。可以满足你比较基础的需求。如果你觉得只有一个ListView的界面太突兀,你可以为这个ListActivity指定一个Layout,需要注意的是,你需要提供一个id为@android:id/list的ListView控件,避免Activity在内部偷偷寻找该控件的时候失败。
除了这些要求,做好UI还有注意易用性和效率。快捷键是一个比较不错的选择,在 Activity中调用setDefaultkeyMode(SHORTCUT_DEFAULT_KEYS),可以开启快捷键模式,然后你可以将菜单绑定到指定快捷键上就OK了。个人觉得Tip也是一个比较重要的东西,但目前观察看来,这个东西只能够自己提供了。界面的动态性有时候是不可避免的,比如说菜单就是一个需要经常根据光标位置提供不同的选项。这个东西Android很人道的考虑到了,你可以参看NodeList这个Sample。它采取的应该是一个静态模拟动态的方式,这样有助于提高速度。你也可以利用ViewInflate,动态从一个XML创建一个控件。成本据Doc说很大,不到万不得已不要使用。
8.Intent消息传递
在前面写Android的ContentProvider时候,可以看到那是基于观察者模式的一个消息传递方法。每一个Cursor、ContentResolver做为一个小的注册中心,相关观察者可以在这个中心注册,更新消息由注册中心分发给各个观察者。而在MFC或Winform中,都会形成一个消息网,让消息在网中流动,被各节点使用、吃掉或者在出口死掉。
相比之下,我个人觉得基于Intent的Android核心消息传递机制是有所不同的。它应该会有一个全局性的注册中心,这个注册中心是隐性的,整个Android系统中就那么一个。所有的消息接收者,都被隐形的注册到这个中心。包括Activity,Service和IntentReceiver。其实说隐形注册是不确切的,所有注册都还是我们手动告诉注册中心的,只是与传统的方式不一样,我们通常不是通过代码,而是通过配置文件来做。在应用的Manifest中,我们会为一些Activity或Service添加上Intent-filter,或在配置文件中添加
当程序有一个消息希望发出去的时候,它需要将消息封装成一个Intent,并发送。这时候,应该是有一个统一的中心(恩,有可能Android底层实现的时候不是,但简单这样看是没问题的...)接受到这个消息,并对它进行解析、判定消息类型(这个步骤降低了耦合...),然后检查注册了相匹配的filter或receiver,并创建或唤醒接收者,将消息分发给它。这样做有很多好处。虽然这种传递有的时候不如点对点的传递快(这有些需要速度的地方,我们看到Android会通过直接通信来做),但有时候又因为它只经过一跳(姑且这么叫吧...),比复杂的流动又要更快。更重要的是,它耦合性低,在手机平台这种程序组件多变的条件下使用十分适合。并且它可以很容易实现消息的精确或模糊匹配,弹性很大。(我个人曾想在开发一个C++二次平台的时候引入这样的机制,但在C++中,建立一套完整的数据marshal机制不容易,相比之下,用java来做会简单很多...)
恩,废话说了很多,具体讲讲Android中Intent的使用。当你有一个消息需要传递,如果你明确知道你需要哪个Activity或者其他Class来响应的话,你可以指定这个类来接受该消息,这被称为显性发送。你需要将Intent的class属性设置成目标。这种情况很常见,比如startActivity的时候,会清楚当前Activity完了应该是哪个Activity,那就明确的发送这个消息。
但是,有的时候你并不确定你的消息是需要具体哪个类来执行,而只是知道接收者该符合哪些条件。比如你只需要有一个接收者能显示用户所选的数据,而不想制定某个具体的方法,这时候你就需要用到隐形发送(传统上,我们可能会考虑用多态,但显然这种方式更为灵活...)。在Android中,你可以为Intent指定一个action,表示你这个指令需要处理的事情。系统为我们定义了很多Action类型,这些类型使系统与我们通信的语言(比如在Activity里面加一个Main的filter,该activity就会做成该应用的入口点),当然你也可以用于你自己的应用之间的通信(同样当然,也可以自定义...)。强烈建议,在自己程序接收或发出一个系统action的时候,要名副其实。比如你响应一个view动作,做的确实edit的勾当,你发送一个pick消息,其实你想让别人做edit的事,这样都会造成混乱。当然只有Action有时候是不够的,在Android中我们还可以指定catalog信息和type/data信息,比如所有的显示数据的Activity,可能都会响应View action。但很多与我们需要显示的数据类型不一样,可以加一个type信息,明确的指出我们需要显示的数据类型,甚至还可以加上一个catalog信息,指明只有你只有按的是“中键”并发出这样的消息才响应。从上面可以看出,Android的Intent可以添加上class, action, data/type, catalog等消息,注册中心会根据这些信息帮你找到符合的接收者。其中class是点对点的指示,一旦指明,其他信息都被忽略。Intent中还可以添加key/value的数据,发送方和接收方需要保持统一的key信息和value类型信息,这种数据的marshal在java里做,是不费什么力气的。
Android的Intent发送,可以分成单播和广播两种。广播的接收者是所有注册了的符合条件的IntentReceiver。在单播的情况下,即使有很多符合条件的接收者,也只要有一个出来处理这个消息就好(恩,个人看法,没找到确切条款或抉择的算法,本来想实验一下,没来得及...),这样的情况很容易理解,当你需要修改某个数据的时候,你肯定不会希望有十个编辑器轮流让你来处理。当广播不是这样,一个receiver没有办法阻止其他receiver进行对广播事件的处理。这种情况也很容易理解,比如时钟改变了,闹钟、备忘录等很多程序都需要分别进行处理。在自己的程序的使用中,应该分清楚区别,合理的使用。
9.ContentProvider数据模型
数据库操作
从我目前掌握的知识来看,SQLite比较轻量(没有存储过程之类的繁杂手段),用起来也比较简单。实例化一个SQLiteDatabase类对象,通过它的APIs可以搞定大部分的操作。从sample中看,Android中对db的使用有一种比较简单的模式,即派生一个 ContentProviderDatabaseHelper类来进行SQLiteDatabase对象实例的获取工作。基本上,ContentProviderDatabaseHelper类扮演了一个singleton的角色,提供单一的实例化入口点,并屏蔽了数据库创建、打开升级等细节。在ContentProvider中只需要调用ContentProviderDatabaseHelper的openDatabase方法获取SQLiteDatabase的实例就好,而不需要进行数据库状态的判断。URI 像进行数据库操作需要用SQL一样,对ContentProivder进行增删改查等操作都是通过一种特定模式的URI来进行的(ig:content: //provider/item/id),URI的能力与URL类似,具体细节可以查看SDK。建立自己的ContentProvider,只需要派生 ContentProivder类并实现insert, delete, update等抽象函数即可。在这些接口中比较特殊的是getType(uri)。根据传入的uri,该方法按照MIME格式返回一个字符串(==!没听过的诡异格式...)唯一标识该uri的类型。所谓uri的类型,就是描述这个uri所进行的操作的种类,比如content://xx/a与 content://xx/a/1不是一个类型(前者是多值操作,后者是单值),但content://xx/a/1和content://xx/a/2 就会是一个类型(只是id号不同而已)。
在ContentProvider通常都会实例化一个ContentURIPraser来辅助解析和操作传入的URI。你需要事先(在static域内)为该ContentURIPraser建立一个uri的语法树,之后就可以简单调用 ContentURIPraser类的相关方法进行uri类型判断(match方法),获取加载在uri中的参数等操作。但我看来,这只是在使用上简化了相关操作(不然就需要自己做人肉解析了...),但并没有改变类型判定的模式。你依然需要用switch...case...对uri的类型进行判断,并进行相关后续的操作。从模式来看,这样无疑是具有强烈的坏味道,类似的switch...case...代码要出现N此,每次一个 ContentProvider做uri类型的增减都会需要遍历修改每一个switch...case...,当然,如果你使用模式(策略模式...)进行改造对手机程序来说无疑是崩溃似的(类型膨胀,效率降低...),所以,只能是忍一忍了(恩,还好不会扩散到别的类中,维护性上不会有杀人性的麻烦...)。增删改查
ContentProvider 和所有数据源一样,向外提供增删改查操作接口,这些都是基于uri的指令。进行insert操作的时候,你需要传入一个uri和 ContentValues。uri的作用基本就限于指明增减条目的类型(从数据库层面来看就是table名),ContentValues是一个 key/value表的封装,提供方便的API进行插入数据类型和数据值的设置和获取。在数据库层面上来看,这应该是column name与value的对应。但为了屏蔽ContentProvider用户涉及到具体数据库的细节,在Android的示例中,用了一个小小的模式。它为每一个表建一个基于BaseColumn类的派生类(其实完全可以不派生自BaseColumn,特别当你的表不基于默认的自动id做主键的时候),这个类通常包括一个描述该表的ContentURI对象和形如 public static final TITLE = “title”这样的column到类数据的对应。从改变上角度来看,你可以修改column的名字而不需要更改用户上层代码,增加了灵活性。insert方法如果成功会返回一个uri,该uri会在原有的uri基础上增加有一个row id。对于为什么使用row id而不是key id我想破了脑袋。到最后,我发现我傻了,因为ContentProvider不一定需要使用数据库,使用数据库对应的表也可以没有主键,只有row id,才能在任何底层介质下做索引标识。
但,基于row id在删除和修改操作是会造成一定的混乱。删除和修改操作类似。删除操作需要传入一个uri,一个where字串,一组where的参数(做条件判定...),而修改操作会多一个ContentValues做更新值。着两个操作的uri都支持在末尾添加一个row id。于是混乱就出现了。当在where参数中指明了key id,而在uri中提供了row id,并且row id和key id所指函数不一致的时候,你听谁的?示例代码中的做法是完全无视row id(无语...),如此野蛮的方式我估计也只能在示例中出现,在实际中该如何用,恩,我也不知道。幸运的是,我看了下上层对 ContentProvider的删除操作,其实都不会直接进行,而是通过调用Cursor的delete方法进行,在这前提下,我想Cursor会处理好这些东西吧。
最后一个操作是查询操作,可以想见,查询的参数是最多的,包括uri和一组条件参数。条件参数类型和标准的sql类似,包括 sort, projection 之类的。从这些参数到sql语句的生成,可以寻求QueryBuilder类的帮助,它提供了一组操作接口,简化了参数到sql的生成工作,哪怕你不懂 sql都完全没有问题(这话说的我自己都觉得有点悬...)。查询返回一个Cursor。Cursor是一个支持随机读写的指针,不仅如此,它还提供了方便的删除和修改的API,是上层对ContentProvider进行操作一个重要对象,需要仔细掌握(Cursor还可以绑定到view上,直接送显,并与用户进行交互,真是程序越往上,封装越好,工作越机械没有复杂性了...)。数据模型
在与界面打交道的Cursor、ContentResolver等数据操作层中,大量采用观察者模式建立数据层与显示层的联系。一个显示层的视图,可以做成某一种观察者注册到Cursor或ContentResolver等数据中间层中,在实现底层ContentProvider中,我们需要特别注意在对数据进行修改操作(包括增删改...)后,调用相应类型的notify函数,帮助表层对象进行刷新(还有一种刷新方式是从一个view发起的)。可以看到 Android的整体数据显示框架有点像MVC的方式。Cursor、ContentResolver相当于控制层,数据层和显示层的交互通过控制层来掌管,而且控制层很稳定不需要特别定制,通常工作只在定制数据层和显示层空间,还是比较方便和清晰的。
10.学习感想
通过这学期对安卓的学习,大概了解了以上一些知识,对安卓有了初步的了解,这几个月给我的东西我想用有形的和无形的两部分概叙,形的当然就是技术水平的长进,虽然其中肯定有很多的不足,相信慢慢会体会到。