gys0000
gys0000
这个问题困扰了我好几天,全部删掉代码,一个步骤一个步骤的撸。。。。 其实只需要在类NiceVideoPlayer的mOnPreparedListener对象里边的onPrepared方法里添加一句代码: ``` private IMediaPlayer.OnPreparedListener mOnPreparedListener = new IMediaPlayer.OnPreparedListener() { @Override public void onPrepared(IMediaPlayer mp) { mCurrentState = STATE_PREPARED; mController.onPlayStateChanged(mCurrentState); LogUtil.d("onPrepared ——> STATE_PREPARED"); mp.start(); // 从上次的保存位置播放 if (continueFromLastPosition) { long...
好久没用过AsyncTask了,不过研究一下内部的代码还挺有意思的。 上边的小伙伴都分析的很厉害。 AsyncTask内部其实就是对线程池和Handler进行了封装。 下边我简单的分析一下代码加深下印象: 1.我们继承了AsyncTask的子类对象调用execute。 ``` public final AsyncTask executeOnExecutor(Executor exec, Params... params) { //下边这一段的意思就是说,一个asyncTask对象只能调用一次execute方法 if (mStatus != Status.PENDING) { switch (mStatus) { case RUNNING: throw new IllegalStateException("Cannot execute task:"...
### Cookie的工作机制 将一些基本信息存放在本地,比如身份识别信息,用户在本站的一些信息,当需要用到的时候,提取使用。这些信息就被称作cookie。 #### cookie的存放 cookie信息有服务器向客户端发送,在头信息中有下边这样的信息 ``` Set-Cookie:user=ZhangSan ``` 这样客户端接到之后就会存放起来,这个信息被称为cookie。 #### cookie的使用 当一个cookie存在的时候,并且条件允许,就会被使用。cookie的值会被放到http请求头中,类似于下边这样 ``` Cookie:user=ZhangSan ``` 服务端接收到这个信息之后,就会根据这个信息作出相应的判断。 ### WebView和http共享cookie 先将http中的cookie取出来,然后放到webview中 参考自 [Android 应用内HttpClient 与 WebView 共享 Cookie](https://www.cnblogs.com/duwei/p/3896835.html) ``` DefaultHttpClient httpclient=....;...
....搞了半天,鼠标移动,全部没了。 因为Android常用到的就是主线程创建Handler,然后子线程使用这个Handler对象发送消息给子线程。我就来梳理;一下这个吧,比较简单。 主要的步骤:主线程创建Handler,获取到looper中的消息队列;子线程中使用Handler穿件消息,并调用sendMessage方法将消息放到消息队列中;主线程的mainLooper早在进程创建的时候,程序的入口main方法中就已经创建了,调用looper的loop方法遍历消息队列,然后通过Handler的handleMessage方法回调到主线程中。 1.创建Handler,并得到消息队列MessageQueue ``` public Handler(Callback callback, boolean async) { mLooper = Looper.myLooper(); mQueue = mLooper.mQueue; } ``` 2.消息的创建,并放到消息队列中 消息的创建就先忽略,直接一路跟踪sendMessage方法,看到enqueueMessage()方法 ``` private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis)...
### 内存溢出 一个5升的水桶,你要装6升的水,不溢出才怪。程序也一样啊,你申请了45M的内存空间,却装载了46M的数据,那肯定会崩溃报错(Out Of Memory)。一般这个在listview或者recycleview加载图片列表时,图片没做优化,就会出现这种问题。 ### 内存泄漏 家里柜子的钥匙有一天被我搞丢了,那这个柜子就不能再被使用了,别人也没办法使用。这种情况就算是内存泄漏。内存被申请使用之后,使用完之后却没有释放,一直被占用着。 内存溢出的的问题我感觉还好解决,因为出现这种问题的时候会崩溃,容易找到问题的发生点。 内存泄漏的问题比较不容易察觉出来,因为他一般不会造成影响;可是当内存泄漏累积到一定程度的时候,就会在程内存溢出等一些问题。 着重分析一下内存的泄漏问题: 下边讲几种容易遇到的情况 第一种场景:静态变量持有了Activity 当静态变量持有了activity时,因为静态变量的生命周期和应用一样长,那么activity就无法被垃圾回收机制回收,这样就造成了内存泄漏。 第二种:匿名内部类会持有外部类的引用,使用不慎会造成内存泄漏。 ``` void spawnThread() { new Thread() { @Override public void run() { while(true); } }.start();...
activity在系统配置改变的时候会重建,那么什么是系统配置呢? ### 系统配置 系统的配置在Configuration类中,有屏幕的方向,屏幕的尺寸等等 > * mcc: SIM卡唯一标示IMSI(国际移动用户识别码)中的国家代码,由三位数字组成,中国为460。此项标示mcc代码发生了改变 > * mnc: SIM卡的唯一标示IMSI(国际移动用户识别码)中的运营商代码,由2位数字组成,中国移动TD系统为00,中国联通为01,此项标示mnc发生改变 > * locale:设备的本地位置发生了改变,一般指切换了系统语言。 > * touchscreen:触屏发生了改变 > * keyboard:键盘类型发生了改变,比如使用了外接键盘 > * keyboardHidden:键盘的可访问性发生了改变,比如用户调出了键盘 > * navigation:系统导航发生了改变,比如采用了轨迹导航,这个有点费解,很难发生,可以忽略它。 > * srceenLayout:屏幕布局发生了改变,很可能是激活了另外一个显示设备...