当前位置:  编程技术>移动开发
本页文章导读:
    ▪非UI线程可以往刷新UI吗(timertask调用progressbar的setProgress的特例)        非UI线程可以去刷新UI吗(timertask调用progressbar的setProgress的特例)今天我qq群里面的大漠同学问了这样一个问题,先看看他粘贴的源代码如下: TimerTask task = new TimerTask() { public void run() { .........
    ▪ 手机汉字输入法欲开国家标准        手机汉字输入法欲立国家标准国人使用手机有两大特点,一是爱换机,一是爱发短信。来自国家信息产业部的统计显示,目前我国手机用户已经超过了4亿多,2005年共发短信3000多亿条。而其.........
    ▪ Cocoa Touch框架摘引计数       Cocoa Touch框架引用计数Cocoa Touch框架提供两种内存管理方式,一种自动内存计数ARC(Automatic Reference Counting ),另一种手动引用技术(manual reference counting)。对于后一种需要程序员自己retain和.........

[1]非UI线程可以往刷新UI吗(timertask调用progressbar的setProgress的特例)
    来源: 互联网  发布时间: 2014-02-18
非UI线程可以去刷新UI吗(timertask调用progressbar的setProgress的特例)

今天我qq群里面的大漠同学问了这样一个问题,先看看他粘贴的源代码如下:

TimerTask task = new TimerTask() {
			public void run()
				{
					if (timeFlag)
					{
						if (timeRemain > 0)
						{
							timeRemain -= 1;
							timeProgress.setProgress(timeRemain);
							
						}
						else
						{
							if (!bDialogShow)
							{
								bDialogShow = true;
								gameView.isgameover = true;
								mHandler.sendEmptyMessage(MSG_RESULT_DIALOG_SHOW);
							}
						}
					}
				}
		};
		
timer = new Timer();
timer.schedule(task, 0, 1000);

他的问题和疑惑是:

这个为什么没报错啊  ?
timeProgress.setProgress(timeRemain);------不是说不能在非UI线程里更新View吗?

ok,下面我们来具体分析一个这个问题:

我知道我们都有一个这样的准则就是在android里面非ui线程是不能去修改ui线程里面的ui控件的;

但问题的事实在这里,却和我们想象的有一定差异,那么问题的具体原因在哪里呢?或者更多的朋友把问题都归结为timertask就运行在主线程里面或者其它,而忽略了一个很重要的东西:在timertask的run方法里面的setprogress(int)方法,为了更好的有助于我们分析,在查看源代码之后我们可以知道这个方法会调用到private synchronized void refreshProgress(int id, int progress, boolean fromTouch) 方法,下面我附上源代码:

private synchronized void refreshProgress(int id, int progress, boolean fromTouch) {
        if (mUiThreadId == Thread.currentThread().getId()) {
            doRefreshProgress(id, progress, fromTouch);
        } else {
            RefreshProgressRunnable r;
            if (mRefreshProgressRunnable != null) {
                // Use cached RefreshProgressRunnable if available
                r = mRefreshProgressRunnable;
                // Uncache it
                mRefreshProgressRunnable = null;
                r.setup(id, progress, fromTouch);
            } else {
                // Make a new one
                r = new RefreshProgressRunnable(id, progress, fromTouch);
            }
            post(r);
        }
    }

从源代码里面我们可以看到当当前刷新的线程不是主线程的时候,ProgressBar会去自动new一个刷新的线程,所以这和刷新的时候在不在主线程里面调用setProgress方法关系不大,从表面上看似乎是在非UI线程里面去修改了主线程的控件,而实际上并非这样。



6楼a215318036昨天 17:18哦哦鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅5楼soso7778昨天 15:20这个可以好好学习一下4楼knighttools昨天 14:10Joker前来围观。3楼lxjiang2632昨天 13:09刚哥V52楼snwrking昨天 13:03以前也对AsyncTask中的onPostExecute()能刷新UI感到奇怪,其实也类似楼主的问题了1楼svrsimon昨天 12:48沈阳斌子 来围观

    
[2] 手机汉字输入法欲开国家标准
    来源: 互联网  发布时间: 2014-02-18
手机汉字输入法欲立国家标准

国人使用手机有两大特点,一是爱换机,一是爱发短信。来自国家信息产业部的统计显示,目前我国手机用户已经超过了4亿多,2005年共发短信3000多亿条。而其中,数字键盘汉字输入法已成为我国1/3人口的日常基础工具。

  然而,一个容易被人忽略的事实是,作为最基本的功能,我国90%以上的手机嵌入的汉字输入法却使用的是国外技术和专利,并且每年要为此支付数亿元的专利费。

  12月15日,广东省信息产业厅召集移动运营、手机制造以及信息家电、数据查询等相关企业,就广东国笔科技有限公司负责起草的国家标准《数字键盘汉字输入技术通用要求》征求意见。借着制定标准的机会,国产手机汉字输入技术正向国外技术发起反击。

  “进口汉字”每年花费数亿元

  随着中国信息化程度的加深,汉字输入技术已经成为人们重要的交流工具。除了人们熟悉的计算机输入技术之外,数字键盘汉字输入技术的应用范围也日益广泛,它不仅可以应用于手机、PDA、小灵通等通信终端设备中,还可以大量应用在税控机、机顶盒、信息家电、电子辞典等信息产品中,蕴含着很大的经济利益和国家利益。

  然而,在这一领域,国内并没有像计算机汉字输入技术那样形成独立的产业,并理所当然地在技术和市场上绝对领先。与我国计算机汉字输入技术几乎占据100%的市场份额相悖,我国90%以上的手机嵌入的汉字输入法技术使用的是国外技术和专利。

  汉字输入技术国家际准工作组组长高精鍊表示,“中国人使用的每台手机都必须给外国公司支付0.3美元的汉字输入技术专利费,每年为此支付的外汇达好几亿元人民币。”

  据高精鍊介绍,国外公司多数召集在国外留学的华人开发汉字输入法,随着移动通信增值服务多元化,已满足不了中国本土化需求。国外的手机文字输入法所采用的汉字标准多使用1980年发布的GB2312(6763个字)标准,早在2000年我国制定发布了强制性标准GBI18030(27484个字),但由于在手机类产品上的汉字处理的核心技术不在中方企业手中,使汉字的信息技术标准在我国不能像PC软件一样,实现版本不断更新和执行。

  全国信息技术标准化技术委员会秘书长王立建在会上发表意见认为,汉字是老祖宗留下来的,作为中华五千年文明的载体,它已经融入了我们的血液,只有我们中国人才不会将汉字输入混同于西文输入,才会深入研究中文自身的规律和智能处理技术手段,“而现在的境况很不正常”。

  借力国标打破“洋码垄断”?

  据王立建介绍,目前国内从事手机汉字输入法研发的企业不下五六十家,但很多尚未有成型的产品。“政府必须有选择地扶持真正技术先进、而且在市场上已经有所作为的自主创新企业,既要打破洋码垄断,也要防止万码奔腾。万码奔腾很容易导致低水平重复,更难形成产业竞争力。”

  身为汉字输入技术国家标准工作组组长的高精鍊还有另外一个身份,就是广东国笔科技有限公司的负责人。据他介绍,近年来,在我国政府的大力推动下,数字键盘汉字输入技术取得了突破性进展,涌现出了国产的优秀输入法软件,设备厂商也具备了在嵌入式装置上自行开发和移植多种应用软件的技术能力,这使得国内自主研发的汉字输入技术有了参与市场竞争的机会。

  “由于国外公司在市场上的垄断地位,国产技术一时难以获得更大市场。”一位手机制造商人士说,等国内的产业真的成了气候,国外公司的垄断自然就不存在了。

  而高精鍊呼吁,随着汉字、汉语在国际上越来越普及,规范汉字输入技术标准,推进普及国产自主创新的汉字输入技术,提高技术门槛,制定数字键盘汉字输入标准,就是保护汉字、汉语的话语权。


    
[3] Cocoa Touch框架摘引计数
    来源: 互联网  发布时间: 2014-02-18
Cocoa Touch框架引用计数

Cocoa Touch框架提供两种内存管理方式,一种自动内存计数ARC(Automatic Reference Counting ),另一种手动引用技术(manual reference counting)。对于后一种需要程序员自己retain和release,其原则是“责任落实”,谁创建了对象(或保留了以创建的对象),谁就是该对象的拥有方,不再使用时,则要负责释放该所有权。

在手动管理内存时,以下有一些注意点

1 对象加入NSMutableArray实例时,会受到retain消息,数组对象会成为该对象的拥有方,即该对象的retainCount会加1.对象从NSMutableArray实例移出时,会收到release消息,即计数会减1.

        2 在调用UITableView下的  [tableView reloadData] 方法后,作为其dataSource的NSArray实例的retainCount会减1

所以在调用[tableView reloadData] 之前,需要将NSArray的实例retain一下。

       3使用UINavigationController 的 [   pushViewController: VC animated: YES],会使压入栈中的VC的retainCount加1


    
最新技术文章:
▪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