当前位置:  编程技术>移动开发
本页文章导读:
    ▪MediaPlayer的异常修复        MediaPlayer的错误修复MediaPlayer: error (1, -2147483648) MediaPlayer(362): error (-38, 0)  在android开发中,经常会用到MediaPlayer。 在使用MediaPlayer时,有时候会遇到:类似的错误。 这时,需要检查一下在设.........
    ▪ andorid- 利用非ui线程绘图步骤        andorid- 利用非ui线程绘图方法Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,常用的方法是利用Handler来实现UI线程的更新的,其本质就是利用ui主线程发送消息由另外一个非u.........
    ▪ 一次HashMap多线程保险引起的事故       一次HashMap多线程安全引起的事故 事故分析 最近一次web工程上线,上线大概半个小时,出现了报警,16核的服务器的cpu使用了1123%,程序出异常了。 Cpu利用率过高一般是因为出现了出现了死.........

[1]MediaPlayer的异常修复
    来源: 互联网  发布时间: 2014-02-18
MediaPlayer的错误修复

MediaPlayer: error (1, -2147483648)

MediaPlayer(362): error (-38, 0) 

在android开发中,经常会用到MediaPlayer。

在使用MediaPlayer时,有时候会遇到:类似的错误。

这时,需要检查一下在设置MediaPlayer的数据源时,使用的是那种方式:

1.在初始化MediaPlayer时,通过create方法设置数据源。则不能写MediaPlayer.prepare()方法,这时,会报错。

2.如果是使用MediaPlayer构造函数初始化MediaPlayer,然后通过setDataSource方法设置数据源时,就需要在start()之前,使用MediaPlayer.prepare()方法,对数据源进行一次编译。能够避免出现(-38,0)这种错误。

3.如果出现MediaPlayer: error (1, -2147483648)这种错误,在logcat中查看是否又io的异常,如果有请检查:1、文件的操作权限,2、是否还有别的进程在操作读取的目标文件(例如,刚刚录制声音的mediarecord是否释放)

4.如果是apk里,写好的文件。可能还需要“"chmod 777 ”修复一下权限。




    
[2] andorid- 利用非ui线程绘图步骤
    来源: 互联网  发布时间: 2014-02-18
andorid- 利用非ui线程绘图方法
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,常用的方法是利用Handler来实现UI线程的更新的,其本质就是利用ui主线程发送消息由另外一个非ui线程进行具体的绘制工作。

使用方法非常简单,下面的例子就是利用一个Handler的handleMessage复写方法收取Message对象发送的消息进行绘制一个运行于蓝色直线上的滚动的圆形。


用handler可以更好地使用我们在windows平台写代码的通过消息驱动的程序设计,比较容易理解,android还有其它的方法,后续!



    
[3] 一次HashMap多线程保险引起的事故
    来源: 互联网  发布时间: 2014-02-18
一次HashMap多线程安全引起的事故

事故分析

最近一次web工程上线,上线大概半个小时,出现了报警,16核的服务器的cpu使用了1123%,程序出异常了。

Cpu利用率过高一般是因为出现了出现了死循环,导致部分线程一直运行。占用cpu时间。使用jstack工具dump出问题的那台服务器的栈信息。死循环的话,首先查找RUNNABLE的线程,找到问题代码如下:

java.lang.Thread.State:RUNNABLE

         at java.util.HashMap.get(HashMap.java:303)

atcom.sohu.twap.service.logic.TransformTweeter.doTransformTweetT5(TransformTweeter.java:183)

共出现了23次。

java.lang.Thread.State:RUNNABLE

         at java.util.HashMap.put(HashMap.java:374)

         atcom.sohu.twap.service.logic.TransformTweeter.transformT5(TransformTweeter.java:816)

共出现了3次。

问题原因已经显而易见。先说说这个Hashmap的使用的方法,在服务器启动之后,第一个访问这个map的时候进行初始化,以后不再变化。hashmap作为TransformTweeter的static成员,也就是类成员。

关键代码:

privatestatic Map<String,String>expressionMap =newHashMap<String, String>();

 

先来分析初始化方法:


上面的栈信息显示有三个线程在对HashMap进行put操作,这显然是违背了作者的本意的。看798行,expressionMap.size==0 这个判读,在多个线程并发操作的的时候,可能存在(这里用一定也不过分)多个线程进入这段初始化代码。

问题就这样引起了,HashMap是非线程安全的,多个线程put的时候造成了某个key值Entry key List的死循环,问题就这么产生了。

当另外一个线程get 这个Entry List 死循环的key的时候,这个get也会一直执行。最后结果是越来越多的线程死循环,最后导致服务器dang掉。解决办法也很简单,就不多说了

我们一般认为HashMap重复插入某个值的时候,会覆盖之前的值,这个没错。但是对于多线程访问的时候,由于其内部实现机制,就可能出现安全问题了。正如<<并发编程实践>>所说,当某个类没有什么是线程安全的时候,就认为它是非线程安全的。

对HaspMap死循环原因分析

有人已经做出了分析,我就不在大费周章了。链接如下:

问题:http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html

分析:http://www.udpwork.com/item/2321.html

 

1楼ndsafhhlk1小时前那就用ConcurrentHashMap<K,V> ,对集合进行多线程处理的时候确实需要留心

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
oracle iis7站长之家
▪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