惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Palo Alto Networks Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cyberwarzone
Cyberwarzone
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
GbyAI
GbyAI
Security Latest
Security Latest
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
C
Cisco Blogs
博客园 - 【当耐特】
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
B
Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
The Last Watchdog
The Last Watchdog
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Project Zero
Project Zero
WordPress大学
WordPress大学
L
LINUX DO - 最新话题
F
Fortinet All Blogs
L
LINUX DO - 热门话题
PCI Perspectives
PCI Perspectives
Simon Willison's Weblog
Simon Willison's Weblog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
The Hacker News
The Hacker News
爱范儿
爱范儿
O
OpenAI News
J
Java Code Geeks
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - pot

在框架中(IFRAME/FRAMESET)传递COOKIE的解决方案[转] jQuery图片播放插件Fancybox使用方法 C#生成缩略图代码 数据抓取的一个类,包含一些常用的方法 抓取AJAX网页的方法-Firefox组件,C#集成 C#编号的ActiveX控件采用CAB的布署方式实例 C#编写ActiveX控件实例(包括命令和事件) PdfAcroViewer C#代码登录活动目录 用XML反序列化快速完成ASP.NET配置文件 - pot - 博客园 Android中的Intent详细讲解 Android模拟器常用使用,和基本功能使用 ZPL II 命令参考 正则表达式语法 - pot - 博客园 《C#异常处理》 C#中接口的作用 The RSA key container could not be opened - pot ASP.NET 页面事件执行顺序 关于object sender,EventArgs e 的一些解释
android Activity类的使用
pot · 2009-06-04 · via 博客园 - pot

在android开发中Activity非常重要,在一个应用中,每一个显示的屏幕都是一个Activity.所以学习android,必须要对Activity有一定的了解.在其他论坛中也有一些关于Activity的介绍,我在这里就想谈谈我对Activity学习的一些看法.首先Activity的生命周期很重要,Activity主要包含六个方法,分别是onCreate,onStart,onResume,onPause,onStop,onDestory.

onCreate和onDestory对应.onStart和onStop对应,onResume和onPause对应.

这几个函数大概是这样定义的,当启动一个Activity的时候,onCreate方法首先会被启动,然后接着是onStart和onResume,也会启动,一般地,等这几个函数都启动完了之后你这个Activity就可以被显示出来了.当然我这里说的是一般的情况,如果你要是在这三个函数初始化的时候启动了一个后台的Service,那么还要等待ServiceConnection执行完毕才能够被显示出来,这里可能有人要问什么是Service了,在以后我会介绍它,这里大家就先了解下Service的回调函数也会影响Acitivity的启动就可以了.这是Activity启动时会调用的三个函数,在Acitivity销毁的时候会调用onPause,onStop,onDestory.当调用完onDestory之后,你的Acitivity也就被销毁完毕了,这时候你在调用Activity的isFinishing的时候,就会返回true,但是此时Activity的this指针还可以被使用,如果你在Activity单起一个线程做其他事情的话,那么上下文变量context指针还是能够被使用的.

     当然Activity有可能还处于其他状态,不一定就是被显示或者被销毁,很有可能这个Activity启动了另一个Activity,这个时候前先的那个Activiy就会被放到系统的堆栈中,等被启动的Activity返回的时候,它又重新被显示出来,这个流程是这样的,一个Activity启动了另外的一个Activity,那么它就会调用onPause函数,进入一种停滞的状态,然后被启动的Activity被销毁返回后,又会调用onResume函数.对于Activity的这种机制,我感觉在初始化的工作最好放到一个自己定义的一个接口中,因为由于Activity状态的改变,你的Activity的Layout就有可能会被改变.说到这里就要谈一下什么叫做Layout,每个Activity的界面的布局就是一个Layout,每个Activity都要有这样一个布局它才能够被显示出来,一般地,我们都会把一个Layout放到一个XML文件当中,然后直接调用Activity的setContentView函数来填充这个Activity,如果Layout不放在xml文件中,也可以用代码生成一个动态的Layout,也就是说用Activity.this指针生成一个Layout.这个给大家推荐一个非常好用的工具叫做droiddraw,论坛里就有链接,站长好像发过贴.这个工具非常好用,不用看教程半小时就能学会,上面有一些特定的控件,把控件摆好布局后直接能生成xml文件.把这个xml文件放到项目的res/layout文件夹下面就可以了.生成好Layout文件后,你就要为你程序要用到的一些控件设定ID,具体怎么设定大家可以在google的android主页里有,叫gettingstarted,那个写得很明白,我就不跟这里重述了.接下来还是谈下android的这几个主要的函数,我还有些建议就是在onCreate函数中尽量少写代码,把尽肯能多的东西放到onResume和那个自定义的初始化函数里去写,onResume这个函数被调用的几率是非常高的,这里大家在模拟器上开发可能没有感觉到onResume的重要性,在真机上测试就会发现,当屏幕变黑进入等待状态,然后你手动恢复屏幕变亮时也会进入onResume状态,所以我感觉把一些刷新控件的方法放到onResume函数中来做还是非常必要的.onPause,onStop,还有onDestroy函数都是用来做一些清理工作的,比如说一些变量要被释放,一些线程要被停滞等等都可以放到这里来做.

下面我来总结一下Activity一个大概的设计思路:

首先设计一个方法,这个方法主要作用就是初始化Activity的控件,进行各种条件判断,对Acitvity来进行不用的布局初始化,这里举个例子来解释下为什么要初始化不同的布局,例如你的这个Activity从SD卡读取了一些信息,那么当你拔出SD卡的时候这些信息肯定也就没有了,那么你就要进行另外的一个布局来显示这个Activity,这个时候你就可以重用这个函数来进行布局的初始化.

onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上面那个用来初始化的函数初始化布局信息.

onStart函数:注册一些变量.这些变量必须在Activity在前台的时候才能够被响应.

onResume函数:调用一些刷新UI的函数,每当Activity调用到这里时就要刷新一下UI各控件的状态.

onPause函数:一般是做一些变量的设置,因为这个时候Activity马上就要切到后台处理,可能有些变量就要被释放掉或者状态要做些相应的调整.

onStop函数:反注册在onStart函数中注册的变量.

onDestory函数:反注册在onCreate函数中注册的变量.

上面谈了些Activity的最常用的一些方法,当然还有很多方法没有谈到,有很多方法我也没有用过,其他方法大家可以参考google的文档.

接下来我来谈谈Activity中最简单的一些通信方法,这里我先定义两个名字为方便接下来的叙述,启动另外一个Activity的那个Activity我们称之为主Activity,被启动的那个Activity我们称之为子Activity.

主Activity和子Acitivity通信的方式有很多种这里介绍两种最简单的方法。

方法一:通过Intent来进行参数的传递,在Intent中有各种putXXX方法来存放各种参数,然后在子Activity接收到这个Intent时能够从这个Intent里取出这个参数,利用getIntnet().getXXXExtra()方法就可以了.

方法二:当一个主Activity想从一个子Activity接受消息时可以使用StartActivityforResult方法,例如这样启动一个Activity,startActivityForResult(i, REQUEST_CODE); 然后在主Activity中的onActivityResult方法对requestCode进行判断来对子Activity不同的返回处理不同的情况,另外子Activity也可以利用setResult方法来设置主Activity方法中的resultCode,这样主Activity也可以根据子Activity的不同的resultCode来处理不同的情况.

今天就先写这么多吧,有什么问题大家加我QQ,可以详谈.

我在补充两句:现在android好像很少有中文资料,一般都要看google的英文文档来学习,

如果你要是对java理解比较深的话,那么我觉得android应用程序还是很容易上手的.