版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Create
projectWeiboCom.itcast.»
Ui»
Db»
Util»
Logic»
weiboUI流程进程与生命周期Android系统会尽可能长的延续一个应用程序进程,但在内存过低的时候,仍然会不可避免需要移除旧的进程。为决定保留或移除一个进程,Android将每个进程都放入一个“重要性层次”中,依据则是它其中运行着的组件及其状态。重要性最低的进程首先被消灭,然后是较低的,依此类推。重要性共分五层,依据重要性列表如下:1.
前台进程是用户操作所必须的。当满足如下任一条件时,进程被认为是处于前台的:任一时间下,仅有少数进程会处于前台,仅当内存实在无法供给它们维持同时运行时才会被杀死。一般来说,在这种情况下,设备已然处于使用虚拟内存的状态,必须要杀死一些前台进程以用户界面保持响应。2.
可视进程没有前台组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可视的:、o
它包含着一个不在前台,但仍然为用户可见的activity(它的onPause()方法被调用)。这种情况可能出现在以下情况:比如说,前台activity是一个对话框,而之前的activity位于其下并可以看到。o
它包含了一个绑定至一个可视的activity的服务。可视进程依然被视为是很重要的,非到不杀死它们便无法维持前台进程运行时,才会被杀死。3.
服务进程是由startService()方法启动的服务,它不会变成上述两类。尽管服务进程不会直接为用户所见,但它们一般都在做着用户所关心的事情(比如在后台播放mp3或者从网上下载东西)。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可视进程的运行需要。4.
背景进程包含目前不为用户所见的activity(Activity对象的onStop()
方法已被调用)。这些进程与用户体验没有直接的联系,可以在任意时间被杀死以回收内存供前台进程、可视进程以及服务进程使用。一般来说,会有很多背景进程运行,所以它们一般存放于一个
LRU(最后使用)列表中以确保最后被用户使用的activity最后被杀死。如果一个activity正确的实现了生命周期方法,并捕获了正确的状态,则杀死它的进程对用户体验不会有任何不良影响。5.
空进程不包含任何活动应用程序组件。这种进程存在的唯一原因是做为缓存以改善组件再次于其中运行时的启动时间。系统经常会杀死这种进程以保持进程缓存和系统内核缓存之间的平衡。Android会依据进程中当前活跃组件的重要程度来尽可能高的估量一个进程的级别。比如说,如果一个进程中同时有一个服务和一个可视的activity,则进程会被判定为可视进程,而不是服务进程。此外,一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A进程最低也会被视为与进程B拥有同样的重要性。因为运行着一个服务的进程重要级别总高于一个背景activity。所以一个activity以启动一个服务的方式启动一个长时间运行过程比简单的衍生一个线程来进行处理要好。尤其是当处理过程比activity本身存在时间要长的情况之下。我们以背景音乐播放和上传一个相机拍摄的图片至网站上为例。使用服务则不论activity发生何事,都至少可以保证操作拥有“服务进程”的权限。如上一节广播接收器生命周期所提到的,这也正是广播接收器使用服务,而不是使用线程来处理耗时任务的原因。核心服务组件1public
class
MainService
extends
Service
implements
Runnable{public
static
weibo=new
Weibo();public
static
User
nowuser;publicstatic
ArrayList<Activity>allActivity=newArrayList<Activity>();//保存所有Activitypublic
static
int
lastActivityId;//保存前端Activity编号//保存用户头像public
static
HashMap<Integer,BitmapDrawable>
alluserIcon=newHashMap<Integer,BitmapDrawable>();//从集合中通过name获取Activity对象public
static
Activity
getActivityByName(String
name)public
static
ArrayList<Task>
allTask=new
ArrayList<Task>();public
static
void
newTask(Task
task)public
booleanisrun=true;核心服务组件2••••••public
void
onCreate()
{//
TODO
Auto-generated
method
stubsuper.onCreate();Thread
t=new
Thread(this);t.start();//启动服务子线程完成所有费时操作}••••••@Overridepublic
void
onDestroy()
{//
TODO
Auto-generated
method
stubsuper.onDestroy();isrun=false;}核心服务组件3public
void
run()
{System.setProperty("weibo4j.oauth.consumerKey",
Weibo.CONSUMER_KEY);System.setProperty("weibo4j.oauth.consumerSecret",
Weibo.CONSUMER_SECRET);try{while(isrun){
Task
lastTask;synchronized(allTask){//接任务if(allTask.size()>0){lastTask=allTask.get(0);//执行任务doTask(lastTask);}}try{Thread.sleep(1000);}catch(Exception
e){}}}catch(Exception
e){isrun=false;}}核心服务组件4////执行任务发消息更新Uipublic
void
doTask(Task
task)
throws
WeiboException{Message
mess=hand.obtainMessage();//产生Ui更新消息对象mess.what=task.getTaskID();switch(task.getTaskID()){case
Task.TASK_GET_USER_INFO://获取用户信息nowuser=weibo.showUser(((Integer)task.getTaskParam().get("uid")).toString());break;case
Task.TASK_NEW_WEIBO://发布新微博String
weibotxt=(String)task.getTaskParam().get("weibotext");weibo.updateStatus(weibotxt);Case
…}hand.sendMessage(mess);//发送UI刷新的消息allTask.remove(0);//移除除任务}核心服务组件5//定义Handle对象负责完成Ui的更新public
Handlerhand=newHandler(){//接收消息刷新数据到UIpublic
void
handleMessage(Message
msg)
{super.handleMessage(msg);switch(msg.what){case
Task.TASK_GET_USER_HOMETIMEINLINE://更新首页Activity
activity=MainService.getActivityByName("HomeActivity");IWeiboActivity
ia=(HomeActivity)activity;//更新微博请求Integer
type=((HomeActivity)activity).UI_REFRESH_STATUS;List<Status>
alls=(List<Status>)msg.obj;ia.refresh(type,alls);break;case
Task.TASK_GET_USER_INFO://获取用户资料case
Task.TASK_GET_USER_IMAGE_ICON://获取用户头像case
Task.TASK_GET_USER_HOMETIMEINLINE_MORE://获取到了更多微博主页信息case
Task.TASK_NEW_WEIBO://发表新微博成功}};Activity核心逻辑package
itcast.logic;public
interface
IWeiboActivity
{void
init();void
refresh(Object
...param);}public
static
final
int
TASK_GET_USER_INFO=0;//获取用户详细信息public
static
final
int
TASK_GET_USER_HOMETIMEINLINE=1;//获取用户首页博客public
static
final
int
TASK_GET_USER_IMAGE_ICON=2;//获取用户头象图片public
static
final
int
TASK_GET_USER_FRIEND=3;//获取用户所有好友public
static
final
int
TASK_GET_USER_HOMETIMEINLINE_MORE=4;//获取用户首页博客下一页public
static
final
int
TASK_NEW_WEIBO=5;//发表新微博public
Task(int
id,Map
param){
this.taskID=id;this.taskParam=param;}public
int
getTaskID()
{
return
taskID;public
void
setTaskID(int
taskID)
{this.taskID
=
taskID;package
itcast.logic;import
java.util.Map;public
classTask
{private
int
taskID;//任务编号private
Map
taskParam;//任务参数•••••••••••}••}public
Map
getTaskParam()
{return
taskParam;}public
void
setTaskParam(Map
taskParam)
{this.taskParam
=taskParam;}}通过Task改变UILogoActivity实现Logo功能描述:全屏幕由浅入深显示3秒钟欢迎界面跳转流程:跳转到用户登录窗口之后自动销毁图片资源•logo_bg.png•<?xml
version="1.0"
encoding="utf-8"?><LinearLayout
xmlns:android="
"android:background="@color/white"android:orientation="vertical"android:gravity="center"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:id="@+id/logo_bg"android:src="@drawable/logo_bg"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout><application
android:icon="@drawable/icon"
android:label="@string/app_name"android:theme="@style/notitle">/*
设置为无标题栏*/requestWindowFeature(Window.FEATURE_NO_TITLE);/*
设置为全屏模式*/getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);Values/style.xml<style
name="notitle"><item
name="android:windowNoTitle">true</item></style>登录窗口实现用户登录功能描述:实现用户登录的交互,如果网络错误,提示网络设置窗口,如果登录失败提示登录失败。跳转流程:如果登录成功,跳转到主UI.图片资源:search_bg.pngtitle_button_normal
.pngtitle_button_selected.pngdivider_horizontal_timeline.pngregist_weibo_n.pngregist_weibo_s.pngLogin.xml<?xml
version="1.0"
encoding="utf-8"?><LinearLayout
xmlns:android="
"android:background="@color/white“android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent"><include
android:id="@+id/title"
layout="@layout/title_two_button"/><TextView
android:paddingLeft="10dip“
android:textSize="16dip"android:textColor="@color/black"android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="账号"/><AutoCompleteTextView
android:id="@+id/user"android:layout_marginLeft="10dip"
android:layout_width="fill_parent"android:layout_height="wrap_content"
pletionThreshold="1"
android:singleLine="true"
android:inputType="textEmailAddress"/><TextView
android:paddingLeft="10dip"
android:textSize="16dip"
android:textColor="@color/black"android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="密码"
/><EditText
android:id="@+id/password"
android:layout_marginLeft="10dip"
android:layout_width="fill_parent"android:password="true"
android:singleLine="true"
/>android:layout_height="wrap_content"<Buttonandroid:id="@+id/loginButton"android:layout_gravity="center_horizontal"android:background="@drawable/regist_weibo"android:layout_width="180dip"android:layout_height="50dip"android:textColor="@color/white"
android:text="登陆"android:divider="@drawable/divider_horizontal_timeline"android:dividerHeight="2.0dip"/></LinearLayout>Res/layout/title_two_button.xml<FrameLayoutandroid:id="@+id/FrameLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"xmlns:android="
"><TextView
android:id="@+id/textView"
android:layout_height="45dip"android:textColor="@color/black"android:textSize="25dip"android:layout_width="fill_parent"android:background="@drawable/search_bg"android:gravity="center"></TextView><Button
android:id="@+id/title_bt_left"
android:textColor="@color/white"android:layout_gravity="center_vertical"android:background="@drawable/title_button"android:layout_height="36dip"
android:layout_width="49dip"></Button><Button
android:id="@+id/title_bt_right"android:background="@drawable/title_button"android:layout_gravity="right"android:layout_height="36dip"android:textColor="@color/white"android:layout_width="49dip"
android:layout_marginRight="2dip"android:layout_marginTop="4dip"></Button></FrameLayout>Res/drawable/title_button.xml<?xml
version="1.0"
encoding="UTF-8"?><selectorxmlns:android="
"><item
android:state_focused="true"android:drawable="@drawable/title_button_selected"
/><item
android:state_selected="true"android:drawable="@drawable/title_button_selected"
/><item
android:state_pressed="true"android:drawable="@drawable/title_button_selected"
/><item
android:state_enabled="false"android:drawable="@drawable/title_button_selected"
/><item
android:drawable="@drawable/title_button_normal"
/></selector>drawable/regist_weibo.xml<?xml
version="1.0"
encoding="UTF-8"?><selectorxmlns:android="
"><item
android:state_focused="true"
android:state_enabled="true"android:state_pressed="false"android:drawable="@drawable/regist_weibo_n"
/><item
android:state_enabled="true"
android:state_pressed="true"android:drawable="@drawable/regist_weibo_s"
/><item
android:state_enabled="true"
android:state_selected="true"android:drawable="@drawable/regist_weibo_s"
/><item
android:state_enabled="true"
android:state_selected="false"android:drawable="@drawable/regist_weibo_n"
/><item
android:drawable="@drawable/regist_weibo_n"
/></selector>android:divider规定List项目之间用某个图形或颜色来分隔。可以用"@[+][package:]type:name"或者"?[package:][type:]name"(主题属性)的形式来指向某个已有资源;也可以用"#rgb","#argb","#rrggbb"或者"#aarrggbb"的格式来表示某个颜色。可参看全局属性资源符号divider。android:dividerHeight分隔符的高度。若没有指明高度,则用此分隔符固有的高度。必须为带单位的浮点数,如"14.5sp"。可用的单位如px(pixel像素),dp(density-independentpixels与密集度无关的像素),sp(scaled
pixels
based
on
preferredfont
size基于字体大小的固定比例的像素),
in(inches英寸),mm(millimeters毫米)。可以用"@[package:]type:name"或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。可参看全局属性资源符号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省2026年中考猜题化学试卷(含答案解析)
- 稀缺古董保护收藏承诺书7篇范文
- 能耗监测与报警系统操作手册
- 依照质量管控体系承诺函(4篇)
- 食品原材料安全承诺书(7篇)
- 2026年政治自律教育心得体会快速入门
- 工作业绩提升目标承诺书(6篇)
- 重大项目建设进度保障承诺书6篇
- 社区生活垃圾分类处理紧急预案
- 线上办公系统安全管理手册
- 2023雷电灾害风险区划技术规范
- 患者情绪疏导与心理支持
- 23J916-1:住宅排气道(一)
- 灰姑娘英语话剧剧本-doc
- 桂林一中小升初去年分班考试试卷
- 急诊科运用PDCA对急诊危重病人急诊绿色通道停留时间原因分析品管圈鱼骨图柏拉图对策拟定
- 【直播带货的模式研究国内外文献综述4300字(论文)】
- 《世界现代设计史》(第2版)配套题库考研真题+章节题库
- 如何写文学评论
- C-TPAT安全管理手册:工厂CTPAT总要求正式版
- 个人抵押借款合同
评论
0/150
提交评论