`
xujunJ2EE
  • 浏览: 69724 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

android的SurfaceView中多线程处理

阅读更多
题外话,发现用MediaPlayer播放一个mp3文件,在播放结束后,出现了以下异常
MP3Extractor Unable to resync Signalling end of stream,有知道的朋友告知一下为什么
用SurfaceView作了一个简单的东西,开个线程,循环显示多个图片,发现在点击Home按钮之后,再次运行这个程序的时候,报 Thread  already started异常。
而surfaceDestroyed方法中,对同步标志也作了处理,开始怀疑是否Home按钮不触发surfaceDestroyed方法,结果Log之后,发现也触发了。
public void surfaceDestroyed(SurfaceHolder holder) {
		if(animThread.isAlive())
		{
			run = false;
		}
	}

上网google了半天,发现国外一个网站上说是android的bug,有个很挫的解决方式:
public void surfaceCreated(SurfaceHolder holder) {
//当用户点击了Home按钮时,线程实际上没有停止,这里如果没有Try会有异常,但这个处理不完美,暂时没有更好的处理
		if(!animThread.isAlive())
		{		
			try
			{ 
				animThread.start();
			} 
			catch(IllegalThreadStateException itse) 
			{ 
				animThread.resume();	
			} 
		}
	}


其实,这个问题的根本原因在于Home键和Back键的区别,以下是一个引用网友的文章
android的手机的back键默认行为是finish处于前台的Activity的即Activity的状态为Destroy状态,再次启动该Activity是从onCreate开始的。

而Home键默认是stop前台的Activity即状态为onStop而不是Destroy,若再次启动它,则是从OnResume开始的,即会保持上次Activityd的状态。

back键也有例外的,按back键不会关闭Activity的,比如播放音乐,按了back键之后仍可以继续播放音乐,这是Music这支ap已经重写了back键的事件处理。

所以,我的这个处理就变得很简单,在onResume中重新调用加载该View就可以了
分享到:
评论
2 楼 songfantasy 2011-02-19  
音乐播放的功能是要放在Service中进行处理的。
1 楼 walter_hu 2011-02-14  
音乐播放器好像是因为它的Service没有被停止,才会播放的;不是纯粹的Activity。

相关推荐

    Android SurfaceView 多线程 滑块

    android demo,使用SurfaceView,使用多线程技术,可以滑动的选择按钮组,动画效果非常流畅,按钮数量可以随意改变。

    AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx

    AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx

    Android提高第三篇之SurfaceView与多线程的混搭.docx

    Android提高第三篇之SurfaceView与多线程的混搭.docx

    Android提高之SurfaceView与多线程的混搭实例

    前文简单介绍了Android中SurfaceView的基本使用,本文就来介绍一下SurfaceView与多线程的混搭。SurfaceView与多线程混搭,是为了防止动画闪烁而实现的一种多线程应用。android的多线程用法与JAVA的多线程用法完全...

    Android App中使用SurfaceView制作多线程动画的实例讲解

    通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI线程的操作和绘制)。但是在其他线程中却不能修改UI元素,例如用后台...

    21天学习android开发教程之SurfaceView与多线程的混搭

    21天学习android开发教程之SurfaceView与多线程的混搭,感兴趣的小伙伴们可以参考一下

    Android SurfaceView

    它的特性是:可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中...

    飞机大战游戏java源码-PlaneGame:飞机大战游戏:主要演示Kotlin语言环境下的SurfaceView+多线程并发操作

    这个小游戏主要用到了SurfaceView+多线程技术,在一块Canvas上绘制各种动画效果,Android的Canvas绘制要比WinFrom和Java Swing的方便多了,默认就实现双缓冲功能,画面效果还挺流畅的。 感兴趣的可以下载玩玩:...

    surfaceView静态和动态绘图

    这是一个多线程在surfacView里面绘制动态静态绘制正玄波

    Android利用SurfaceView实现简单计时器

    自学了android有几个月了,跟着网上的节奏,应该早点写些博客来提高自己的水准的。但苦于技术水准始终不自信(也是不过关的结果吧),就一直只是将自己学习过程中的问题和重要的知识点写在自己的笔记文档中。 但,总...

    Android开发与应用——张荣,原书配套课件

    7.3 多线程中的常用类 7.3.1 Handler类 7.3.2 AsyncTask类 7.3.3 Timer定时器 7.4 Android多线程通信机制 7.5 小结 练习 第8章 网络通信 8.1 通过HTTP访问网络 8.1.1 测试用Web服务器 8.1.2 ...

    Android使用surfaceView自定义抽奖大转盘

    1、首先了解SurfaceView的基本用法,它跟一般的View不太一样,采用的双缓存机制,可以在子线程中绘制View,不会因为绘制耗时而失去流畅性,这也是选择使用SurfaceView去自定义这个抽奖大转盘的原因,毕竟绘制这个...

    android开发资料大全

    在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 Android通过画线实现button效果 Android如何防止apk程序被反编译 Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 ...

    Android应用源码安卓源码(172个合集).zip

    android多线程断点下载.rar Android手机一键Root原理分析.zip Android手机的VoIP客户端 Sipdroid.rar Android有未接来电后处理(判断未接来电).rar Android模仿乐淘的应用程序分析源码.zip Android游戏源码——忍者快...

    android开发揭秘PDF

    4.2.22 对话框中的进度条(ProgressDialog) 4.3 界面布局 4.3.1 垂直线性布局 4.3.2 水平线性布局 4.3.3.相对布局(RelativeLayout) 4.3.4 表单布局(TableLayout) 4.3.5 切换卡(TabWidget) 4,4 小结 第5章 Android...

    Android讲义_PDF_by高焕堂(1)

    A01_Android的软硬整合潮流 A02_Android四大组件 A03_Android的进程和IPC机制 A04_Android的线程模式 A05_Android的软硬整合流程 A06_认识Android的UI...A07_SurfaceView与UI多线程与2D特效 A08_DB与ContentProvider

    Android 下载视频文件并自动播放.rar

    Android 下载视频文件并自动播放,下载影片并播放,重新建构MediaPlayer对象,设定显示于SurfaceHolder,在线程运行中,调用自定义函数抓下文件,自定义setDataSource,由线程启动,若无法顺利取得扩展名,预设为....

Global site tag (gtag.js) - Google Analytics