暑假准备做一个mmorpg模型,填充填充自己空洞的简历,先从登录模块开始吧。
概论
本文章会讨论以下问题
1、关于转屏重新创造activity
2、关于mediaplayer回收
3、关于对话框(AlertDialog)中调用findViewById返回值null
代码地址https://github.com/PhenixSing/mmorpg
关于转屏重新创造activity
本来还没发现,因为一般用户都是锁定屏幕的,后来准备做横屏时才发现,首先强制横屏有两种方式
一.在AndroidManifest.xml对每个Activity进行配置:
activity android:name="com.barilab.katalksketch.SplashActivity" android:screenOrientation="landscape"
二.在Activity的onCreate()中设置:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
(具体参考https://blog.csdn.net/lixpjita39/article/details/72899629)
我先用了第二种方法,结果发现实际效果是先创建一个竖屏,再创建一个横屏,结果变成背景音乐双重奏了。同时也发现转屏会重新调用onCreate(),网上倒是有禁止转屏重新onCreate()的方法,在AndroidManifest.xml配置
android:configChanges="keyboardHidden|orientation|screenSize"
(具体参考https://blog.csdn.net/yann02/article/details/79163960)
不过我不太需要这种,因为第一种强制横屏方法是在AndroidManifest.xml中配置,所以不会像第二种一样创建两次activity。
但这个问题却很容易被忽略,因为大多数人是直接模拟器调试,即使是真机也一般是强制竖屏。
关于mediaplayer回收
mediaplayer不会主动回收,也就是说,如果activity销毁了,mediaplayer还会继续播放,如果是音乐播放器那倒是完全没问题,但是......
所以简单明了直接重写onDestroy()
protected void onDestroy(){
if(mediaPlayer!=null){
mediaPlayer.stop();
mediaPlayer.release();
}
super.onDestroy();
}
这个问题还可以和转屏重新创建activity结合起来,不停转屏,创建mediaplayer,又没释放,然后你手机就炸了,所以用完释放是个好习惯
关于对话框(AlertDialog)中调用findViewById返回值null
登录与注册是用自定义对话框,(参考https://blog.csdn.net/piglite/article/details/50453397)
但是自定义对话框是另一个xml布局文件,所以直接调用findViewById返回null,找不到该id(编译器不会报错),必须强制使用当前View.findViewById()才行。不然就会报错Attempt to invoke virtual method...on a null object reference。
(参考https://blog.csdn.net/TNove/article/details/78761511)