在安卓开发中,总有那么一些看似简单,实则绊脚的难题,等你去探索,等你去解决,也许你已经遇见了解决了,也许你还没碰上,写下这篇总结,希望能帮助那行即将遇到的朋友,快速解决这些小问题!

一、activity中的PopupWindow。

  之前在使用popupwindow的时候并未注意到这个问题,知道有一次偶然发现讲fragment中的弹窗移植到activity中时总是会报 寄存的view视图为null,如下图:

  后来经过百度大神的指点,终于找到一个觉得讲得有理的原因,那就是popupwindow弹窗的代码写在activity的oncreat方法或其他普通生命周期方法中导致的错误,因为这时候activity并未渲染完毕。所以需要将popupwindow中的显示方法showAtLocation放在oncreat方法外面,具体放在哪里才能保证是在activity渲染完毕之后呢?当然放在fragment中那必然是可以的。那activity中到底如何使用呢?有网友提供了一些办法:

1、移到事件中(比如一个button的click事件中)
2、移到子线程中;另起一线程,在线程中不断循环,直到判断控件是否渲染完毕(如长宽大于0)
3、移到重写的控件中,在控件ondraw()完后生成pop

  以上方法我个人仅仅赞同第一种,但是有时候第一种也无法满足我们,比如你要求activity一进来就弹窗提示,这时当然是不存在点击事件的。

最后找到一个绝佳的办法,如下:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
   // TODO Auto-generated method stub
   super.onWindowFocusChanged(hasFocus);
   if(hasFocus){
      //此处进行弹窗操作
   }
}
该方法是重写activity中的自带方法,当activity获得焦点之后自动调用,此时activity绝对是渲染完毕的了哟,绝不骗你!
 
二、Android中使用声音池SoundPool。
  对于对SoundPool还不了解的童鞋,我先附上一段网上摘要下来的资料:
  在Android开 发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高、延迟时间较长、不支持多个音频 同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。
  下面说说SoundPool的特点
  1. SoundPool载入音乐文件使用了独立的线程,不会阻塞UI主线程的操作。但是这里如果音效文件过大没有载入完成,我们调用play方法时可能产生严 重的后果,这里Android SDK提供了一个SoundPool.OnLoadCompleteListener类来帮助我们了解媒体文件是否载入完成,我们重载 onLoadComplete(SoundPool soundPool, int sampleId, int status) 方法即可获得。
  2. 从上面的onLoadComplete方法可以看出该类有很多参数,比如类似id,是的SoundPool在load时可以处理多个媒体一次初始化并放入内存中,这里效率比MediaPlayer高了很多。

  3. SoundPool类支持同时播放多个音效,这对于游戏来说是十分必要的,而MediaPlayer类是同步执行的只能一个文件一个文件的播放。
 最后贴上SoundPool的简单使用方法:
  SoundPool soundPool = new SoundPool(5,AudioManager.STREAM_SYSTEM,0);
    soundPool.load(mContext,R.raw.raws,1);
  soundPool.play(1,1, 1, 0, 0, 1);
如上就是一个简单的播放了,其中各个参数的意义大家可以自行上网查找,具体说说上述步骤的不足之处
刚开始我使用的时候一直出不来声音,后来使用Debug一步一步调试,却能走通,声音也出来了,想想二者运行唯一不同的是调试的时候我很缓慢的走,难道是加载需要时间?后来研究得到确认,确实是load()这个方法需要加载时间,不能立即播放,也许你也遇到这问题,解决办法是开启一个线程,在线程中sleep一秒,然后在进行play方法的调用,完美解决。当然,如果你的声音播放不是需要立即执行,而是需要点击某个按钮之类的,那就不会出现这问题了。
 
三、未完待续。
 
  
 

Android中那些有你不知道的事的更多相关文章

  1. 关于Android中so解析那些事

    1.Android系统目前支持的CPU架构:ARMv5.ARMv7.x86.MIPS.ARMv8.MIPS64.x86_64,每一种都关联着一个ABI(Application Binary Inter ...

  2. Android 中 LayoutInflater 的使用

    一.LayoutInflater 的作用 我们一般使用 LayoutInflater 做一件事:View inflate(int resource, ViewGroup root); inflate( ...

  3. Android中ListView的几种常见的优化方法

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...

  4. android中的回调简单认识

    首先说一下最抽象的形式--2个类,A类和B类.A类含有1个接口.1个接口变量.(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的"地方";B类实现A中的接口,(可能)含有 ...

  5. Android中自定义属性(attrs.xml,TypedArray的使用)

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  6. 那些Android中的性能优化

    性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应 ...

  7. android中的事件传递和处理机制

    一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下.现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难.总之,不要自己打击自己,要相信自己 ...

  8. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  9. 源码解析Android中View的measure量算过程

    Android中的Veiw从内存中到呈现在UI界面上需要依次经历三个阶段:量算 -> 布局 -> 绘图,关于View的量算.布局.绘图的总体机制可参见博文< Android中View ...

随机推荐

  1. iOS开发之Runtime常用示例总结

    经常有小伙伴私下在Q上问一些关于Runtime的东西,问我有没有Runtime的相关博客,之前还真没正儿八经的总结过.之前只是在解析第三方框架源码时,聊过一些用法,也就是这些第三方框架中用到的Runt ...

  2. .NET Core跨平台:使用.NET Core开发一个初心源商城总括

    1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是 ...

  3. WPF - 监听判断键盘组合键的按下

    对于键盘事件PreviewKeyDown.PreviewKeyUp.KeyDown.KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性 ...

  4. sql decimal & float & celling 介绍

    decimal 可以用在指定几个位数比如 123.456, decimal(3,3), 用这类型计算比较准确. 默认情况下,将数字转换为较低精度和小数位数的 decimal 或 numeric 值时, ...

  5. windows container (docker) 容器资料笔记

    背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...

  6. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  7. 清空file文件域的方法

    我们在实际应用中经常希望能把文件域给清空,比如使用change事件时,因为不清空再次选择同一文件时将不在触发change事件. 但是在IE中,由于安全设置的原因,是不允许更改文件域的值的,也就是不能使 ...

  8. ST Lab1 junit test

    代码地址:  https://github.com/newff/st-lab1 Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Insta ...

  9. onchange、onclick、onblur等事件区别

    onblur:控件在失去焦点的时候触发 OnChange:当控件的内容发生改变时触发该事件 OnClick:点击该控件时触发 OnKeyDown:在控件有焦点的情况下,按下键时发生 OnKeyUp:在 ...

  10. JS中的普通函数和箭头函数

    最近被问到了一个问题: >javaScript 中的箭头函数 (=>) 和普通函数 (function) 有什么区别? 我当时想的就是:这个问题很简单啊~(flag),然后做出了错误的回答 ...