当前位置:  编程技术>移动开发
本页文章导读:
    ▪StartActivityForResult() 跟setResult() 方法获取不到result 的BUG        StartActivityForResult() 和setResult() 方法获取不到result 的BUGsetResult() 这个方法需要在 finish() 方法 调用前  ,才可以 set  成功  activity返回result是在被finish的时候,也就是说调用setResult()方法必须.........
    ▪ 线程状态的迁徙        线程状态的迁移 运行→就绪: 有时间片的线程在时间片用完的时候,被系统转为就绪状态并移到优先级队列的末尾;可被抢占的线程在出现一个更高优先级的可运行的线程时会被抢占.........
    ▪ 多线程高速解压FastZipArchive介绍       多线程快速解压FastZipArchive介绍在iOS项目中用到解压缩,用的是ZipArchive,下载点击这里,ZipArchive是基于minizip的,但不支持多线程,封装的也不方便,然后就有了FastZipArchive,现在有一个粗糙.........

[1]StartActivityForResult() 跟setResult() 方法获取不到result 的BUG
    来源: 互联网  发布时间: 2014-02-18
StartActivityForResult() 和setResult() 方法获取不到result 的BUG

setResult() 这个方法需要在 finish() 方法 调用前  ,才可以 set  成功 


activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的

按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法,然后设置resultCode为RESULT_CANCELED,也就不会返回任何数据了 .
解决方法就是在Activity里面捕获按BACK的事件,捕获到之后先setResult,然后自己来调用finish,就搞定了……把BACK事件直接自己给吞了


如果 测试 可以把setResult()方法 可以放在一个点击事件中  我是放在了onDestroy()方法里面  ,可以调用 到 StartActivityForResult()方法 ,但是获取到的ResultCode = 0


把setResutl()方法放到 一个返回按钮的点击事件中,一切正常了;



更多 基础跳转 参考资料  http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html


    
[2] 线程状态的迁徙
    来源: 互联网  发布时间: 2014-02-18
线程状态的迁移




运行→就绪:
有时间片的线程在时间片用完的时候,被系统转为就绪状态并移到优先级队列的末尾;可被抢占的线程在出现一个更高优先级的可运行的线程时会被抢占,转为就绪状态。但是在这种情况下它不会被移到优先级队列的末尾;线程可以自己调用relinquish()函数自己放弃运行,转为就绪并移到优先级队列末尾。
就绪→运行:
当线程被调度运行的时候,其由就绪态转变为运行态。
运行→挂起:
线程可以将自己挂起。一个典型的例子就是sleep调用。但是挂起的线程不能够唤醒自己,就是sleep调用后也是由时间管理负责唤醒的。另外线程调用suspend()也可以将自己无条件挂起,这个挂起,只能由其他线程用resum()调用唤醒。这样的做法,典型的应用是在等待队列机制(wait_queue)中的实现。
就绪→挂起:
就绪状态下的线程可以被别的线程挂起。目前NGSA屏蔽了Nucleus的这种功能,即一个线程不能随随便便将其他线程挂起。
挂起→就绪:
当挂起的线程被唤醒后,线程即转为就绪状态。线程唤醒后会被放到相应优先级队列的尾部,等待系统调度。
运行 / 就绪 / 挂起→终止:
当前线程可以调用terminate_task()函数终止处于其他状态的别的线程;在Nucleus中,当前线程也可以终止自己,但在NGSA中,我们不推荐这么做。即使终止其他线程,我们也必需保证线程获取的资源在终止操作之前都已经正确释放,比如打开的文件已经关闭,申请的内存空间已经释放,持有的锁已经解开,等等。所以,对于终止线程的操作,我们要特别谨慎,在代码审查上,对于这样的操作要严格仔细检查,确保不会出现资源泄漏等问题。
终止一个线程,我们一般是为了删除它,线程终止之后就不能再得到调度了。要删除一个线程前,必需确保它处于终止或完成状态。
运行→完成:
当前线程正常运行完毕以后,就返回TCC_Task_Shell函数,将自己置为完成态。线程处于完成态之后,就不会再进行调度了,这个时候可以使用delete_task()函数将之安全删除。


    
[3] 多线程高速解压FastZipArchive介绍
    来源: 互联网  发布时间: 2014-02-18
多线程快速解压FastZipArchive介绍

在iOS项目中用到解压缩,用的是ZipArchive,下载点击这里,ZipArchive是基于minizip的,但不支持多线程,封装的也不方便,然后就有了FastZipArchive,现在有一个粗糙的版本,下载点击:

一  FastZipArchive的简介如下:

1 基于ZipArchive和minizip的解压框架

2 支持多线程并发
3 拥有更快的解压缩速度(FAST_MODE下做了代码优化和使用内存目录树)
4 使用delegate和block回调方式 
5 支持arc/non-arc 

二 使用说明

FastZipArchive使用很简便:

1将FastZipArchive下的文件引入你的工程



2创建一个FZipRequest的请求

    NSString *sourcePath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"1.zip"];
    NSString *desPath = @"1";
    FZipRequest *re1 =[[FZipRequest alloc]init];
    re1.zipFilePath = sourcePath;
    re1.unZipFilePath = desPath;
    re1.type = ZIP_TO_UNZIP;
    re1.mode = FAST_MODE;
    re1.delegate = self;


3将FZipRequest放入初始化好的FZipArchiveManager

_zipArchiveManager = [FZipArchiveManager defaultManager];
[_zipArchiveManager addTask:request];







    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪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