题外话,发现用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就可以了
分享到:
相关推荐
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行绘制操作,从而提高图形渲染性能,特别适用于需要连续更新显示内容的应用,如游戏、视频播放等。本示例中,"Android SurfaceView 多...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理...因此,开发者需要具备扎实的Android基础知识,尤其是对多线程和图形渲染的理解,才能更好地应对可能出现的挑战。
`SurfaceView`提供了直接与硬件图形管道交互的能力,使得开发者可以在单独的线程中进行绘制,从而避免阻塞UI主线程,提高应用性能。本篇文章将深入解析如何在`SurfaceView`中添加线程以及相关的源码分析。 首先,`...
### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
对于学生来说,这个案例提供了很好的实践机会,可以学习到Android视图层次结构、SurfaceView的特殊性质,以及如何在复杂的UI布局中处理高性能的图形渲染。同时,它还涵盖了Android开发中的布局管理和事件处理等基础...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高效地绘制操作,常用于创建高性能的图形界面,如游戏或视频播放。在本篇文章中,我们将深入探讨如何将SurfaceView与多线程相结合,...
SurfaceView是Android系统中的一个View类,它的特点在于它拥有自己的Surface,这个Surface位于应用程序窗口的底层,并且有自己的绘制线程。这意味着SurfaceView可以在不阻塞主线程的情况下进行频繁的绘图操作,这...
SurfaceView内部有一个Surface对象,它有自己的渲染线程,这个线程负责绘制内容到Surface上,而Surface在窗口堆栈中处于一个较高的层次,使得其内容总是在其他普通View之上。这就意味着,直接在SurfaceView上添加的...
综上所述,实现SurfaceView的多点触控移动放大缩小涉及到了Android的触摸事件处理、矩阵变换、多线程编程等多个知识点。通过理解并熟练运用这些技术,可以为用户提供流畅且响应迅速的交互体验。在实际开发中,可以...
前文简单介绍了Android中SurfaceView的基本使用,本文就来介绍一下SurfaceView与多线程的混搭。SurfaceView与多线程混搭,是为了防止动画闪烁而实现的一种多线程应用。android的多线程用法与JAVA的多线程用法完全...
SurfaceView的特性使其能够在单独的线程中进行渲染,从而避免了UI线程的阻塞,提升了应用的流畅性。 SurfaceView的工作原理可以分为以下几个关键点: 1. **双缓冲机制**:SurfaceView内部使用了双缓冲技术,一帧...
同时,考虑到多线程的并发问题,我们需要确保在正确的线程(通常是UI线程)中处理触摸事件。 文件"example_surfaceview2"可能包含了使用SurfaceView进行游戏开发的示例代码,包括SurfaceHolder的回调函数实现、游戏...
SurfaceView是Android系统提供的一种特殊视图,它拥有一个独立于应用程序主线程的Surface,可以在后台线程中进行绘图操作,从而避免阻塞UI线程。SurfaceView由两部分组成:一个是View,显示在界面上;另一个是...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,比如游戏或者视频播放器。通常,SurfaceView有一个独立的渲染线程,用于处理高耗时的图形操作,以避免阻塞主线程,...
而SurfaceView的Surface部分是直接在单独的硬件渲染线程中绘制的,它并不参与主线程的布局和绘图流程。因此,将控件直接添加到SurfaceView上会导致渲染问题,控件可能无法正确显示或响应触摸事件。 解决这个问题的...
本教程将深入探讨如何结合多线程使用SurfaceView来实现更高效的动画效果。 首先,了解Android中的多线程概念。Android应用的主线程,也称为UI线程,负责处理用户交互和更新界面。如果在主线程中执行耗时操作,如...
在Android平台上开发游戏时,...在实际项目中,还需要考虑更多的细节,如碰撞检测、音效、动画效果等,但这些都建立在`SurfaceView`提供的基础之上。实践过程中,不断优化和完善,你的游戏将会变得更加有趣和引人入胜。
总的来说,这个项目涵盖了Android开发中的多个关键知识点,包括`SurfaceView`的使用、手势识别、图片处理、自定义绘图以及邮件发送。通过这个项目,开发者可以学习到如何在Android应用中实现类似地图应用的交互功能...
SurfaceView则是一种特殊的View,它创建了一个独立的Surface,其绘图不在UI线程中进行,而是由一个单独的线程处理。这种方式使得SurfaceView更适合处理高性能的图形渲染,例如视频播放、游戏场景等需要频繁更新的...