当前位置:  编程技术>移动开发
本页文章导读:
    ▪Activity起动之SingleTask-onNewIntent的用法及原理        Activity启动之SingleTask------onNewIntent的用法及原理 最近看别人的代码,看到了onNewIntent方法,不知道干嘛用的,于是研究一下。 onNewIntent调用时机   在IntentActivity中重写下列方法:onCreate onSta.........
    ▪ 本人准备撰写大富翁游戏,采用andengine引擎编写,有感兴趣的,顶一上,人数超500,小弟我就开始        本人准备撰写大富翁游戏,采用andengine引擎编写,有感兴趣的,顶一下,人数超500,我就开始已经基本编写完毕。如果大家感兴趣,我会把开发步骤一步一步公布,并贴上代码。1楼thtrlj昨天 19.........
    ▪ Looper中的讯息队列处理机制       Looper中的消息队列处理机制Looper中的消息队列处理机制 Looper也提供了消息的定义、消息的发送、消息的处理者的自定义和消息队列。在其头文件Looper.h中,定义了消息结构体Message,它只有一.........

[1]Activity起动之SingleTask-onNewIntent的用法及原理
    来源: 互联网  发布时间: 2014-02-18
Activity启动之SingleTask------onNewIntent的用法及原理
最近看别人的代码,看到了onNewIntent方法,不知道干嘛用的,于是研究一下。 onNewIntent调用时机   在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent 一、其他应用发Intent,执行下列方法: I/@@@philn(12410): onCreate
I/@@@philn(12410): onStart
I/@@@philn(12410): onResume

发Intent的方法:
Uri uri = Uri.parse("philn://blog.163.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);    
startActivity(it);

二、接收Intent声明:
 <activity android:name=".IntentActivity" android:launchMode="singleTask"
                  android:label="@string/testname">
             <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="philn"/>
            </intent-filter>
  </activity>

三、如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于
I/@@@philn(12410): onPause
I/@@@philn(12410): onStop 状态的话
其他应用再发送Intent的话,执行顺序为:
I/@@@philn(12410): onNewIntent
I/@@@philn(12410): onRestart
I/@@@philn(12410): onStart
I/@@@philn(12410): onResume

在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题 首先,在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:

1 <activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1">
2 </activity>
launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:
1 protected void onNewIntent(Intent intent) {
2   super.onNewIntent(intent);
3   setIntent(intent);//must store the new intent unless getIntent() will return the old one
4   processExtraData();
5 } 不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法,如下所示:
01 public void onCreate(Bundle savedInstanceState) {
02   super.onCreate(savedInstanceState);
03   setContentView(R.layout.main);
04   processExtraData();
05 }
06  
07 protected void onNewIntent(Intent intent) {
08   super.onNewIntent(intent);
09   setIntent(intent);//must store the new intent unless getIntent() will return the old one
10   processExtraData()
11 }
12  
13 private void processExtraData(){
14   Intent intent = getIntent();
15   //use the data received here
16 }

    
[2] 本人准备撰写大富翁游戏,采用andengine引擎编写,有感兴趣的,顶一上,人数超500,小弟我就开始
    来源: 互联网  发布时间: 2014-02-18
本人准备撰写大富翁游戏,采用andengine引擎编写,有感兴趣的,顶一下,人数超500,我就开始
已经基本编写完毕。如果大家感兴趣,我会把开发步骤一步一步公布,并贴上代码。1楼thtrlj昨天 19:58顶一个,绝对支持

    
[3] Looper中的讯息队列处理机制
    来源: 互联网  发布时间: 2014-02-18
Looper中的消息队列处理机制

Looper中的消息队列处理机制

Looper也提供了消息的定义、消息的发送、消息的处理者的自定义和消息队列。在其头文件Looper.h中,定义了消息结构体Message,它只有一个类型成员,Message的定义如下(见文件Looper.h,下同):

消息的处理者可由MessageHandler进行处理:

使用者可通过派生出子类来扩展消息。对消息的处理,需要在MessageHandler的子类中重载handleMessage函数。

它们将被封装到消息“信封”MessageEnvolope中,然后送到消息队列中。MessageEnvolope的定义如下:

Looper中维护着一个自己的消息队列:

可以使用Looper的sendMessageAtTime(另外两个版本也最终都使用的是sendMessageAtTime)向消息队列中发送消息:

消息发送函数将根据实参,将它们打包到消息信封中,然后放置到消息队列中。最后,若消息队列中原先没有消息(即在接收方睡眠等待),则让wake函数写入字符到管道写端唤醒接收方在pollInner中epoll_wait上的睡眠等待,让其开始对消息接收处理。pollInner对消息队列的处理的代码片段如下:

当醒来后,在上面的行275若检查到消息队列不为空,则检查队列上的第一项是不是超时了。若超时了,则取下它,调用消息信封中指定的MessageHandler的handleMessage函数去处理消息(行294)。

因此,借助于Looper的sendMessageXXX函数和pollOnce函数,可以向Looper内部的消息队列发送消息,这时pollOnce的调用者将被唤醒去处理消息,当消息处理完毕和没有消息时,将会睡眠等待。

本文节选自《深入剖析Android系统》一书

杨长刚 著

电子工业出版社出版


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android录音应用实例教程 iis7站长之家
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3