列表播放视频简单实现

最近因项目需求,需要在滚动列表中播放视频。查了半天资料,发现其实现没有想象中的那么难。

原理

众所周知,由于SurfaceView没有UI同步缓冲区,就导致了在列表滚动的时候,正在播放的视频跟不上滚动的步伐;而在SDK 15的时候,谷歌官方提供了新的具有UI同步缓存的视频播放api TextureView。
本文真是基于该新Api实现。

阅读更多

记一次app进程被kill的经历

一、出现问题

最近在为河北电信做定制游戏平台开发的时候,遇到了一个很奇怪的问题,在某些盒子上,从平台打开某些游戏,玩上几分钟,然后该退出游戏,回到公司的游戏平台后,便出现了页面数据丢失的问题。
排查了几天(在这不得不吐槽电信的官僚主义,好话说尽,给予各种承诺,依然不提供可以进行adb调试的测试盒子)。最终发现是由于盒子内存太小(几年前的标准,1G内存!!!),当运行大型游戏后,盒子系统自动kill了公司的游戏平台,吐血啊。
该问题如下图所示:
问题.png

阅读更多

那些年,我们爬过的坑--Andriud TV篇(一)


从去年开始,从事Android TV开发已经大半年了,期间遇到过各种各样的坑,最严重、最难解决的莫过于焦点问题。痛定思痛,决定把TV开发中遇到的各种坑一一分享出来,让更多的人不再爬我所爬过的坑。

列表焦点问题

在TV开发中,VerticalGridView是谷歌专门为Android TV适配的RecyclerView,VerticalGridView很好的解决了列表的焦点问题,但是如果使用不当,很容易出现item子项焦点错乱问题。

在TV开发中尽量尽可能不适用没有优化过的RecyclerView!!!!!

小坑—–item焦点无法获取问题

进入列表界面,我希望的是按上下左右按键,item将能取得焦点,实现放大效果,但是我的实际效果如图所示,按上下键,变成了列表上下滚动,而不是我希望实现的item放大。
列表item无法获取焦点

阅读更多

五款小众但异常实用的免费软件

colorcop

在开发中,总会遇到UI妹妹不标识颜色的情况,有时,找她们备注颜色,总会被骂个狗血淋头(说多了都是泪),求人不如求己。
colorcop是一款window下取色软件,在本人使用过的10多款软件中,在简洁易用性方面简直秒杀所有!

软件截图:
colorcop_1

阅读更多

Android多线程断点续传下载


原理

其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下载。

断点:线程停止的位置。
续传:从停止的位置重新下载。
用代码解析就是:
断点 : 当前线程已经下载完成的数据长度。
续传 : 向服务器请求上次线程停止位置之后的数据。
原理知道了,功能实现起来也简单。每当线程停止时就把已下载的数据长度写入记录文件,当重新下载时,从记录文件读取已经下载了的长度。而这个长度就是所需要的断点。

续传的实现也简单,可以通过设置网络请求参数,请求服务器从指定的位置开始读取数据。
而要实现这两个功能只需要使用到httpURLconnection里面的setRequestProperty方法便可以实现.

public void setRequestProperty(String field, String newValue)

如下所示,便是向服务器请求500-1000之间的500个byte:

conn.setRequestProperty("Range", "bytes=" + 500 + "-" + 1000);

以上只是续传的一部分需求,当我们获取到下载数据时,还需要将数据写入文件,而普通发File对象并不提供从指定位置写入数据的功能,这个时候,就需要使用到RandomAccessFile来实现从指定位置给文件写入数据的功能。

public void seek(long offset)

如下所示,便是从文件的的第100个byte后开始写入数据。

raFile.seek(100);

而开始写入数据时还需要用到RandomAccessFile里面的另外一个方法

public void write(byte[] buffer, int byteOffset, int byteCount)

该方法的使用和OutputStream的write的使用一模一样…

以上便是断点续传的原理。

阅读更多

在github上创建个人博客,其实没有那么难


成功搭建的hexo网站

我的hexo网站

前段时间萌发自己搭建博客的念头,冲动之下买了个云服务器,奈何个人对html的东西实在不通,折腾了几天,blog依然丑的可以。后来无意间看见在github上可以搭建个人blog,就用谷歌折腾该如何在github上搭建blog,奈何网上很多教程都过于古老,或者很多细节都含糊不清,导致爬了好几天几天坑,才把blog搭建了起来。

阅读更多

从commit一步步带你走向fragment的生命周期


Fragment 是android开发中最常用的组件之一,用了好几年,我都不知道Fragment到底是个什么东西,Activity加载Fragment的原理是怎样的,为什么官方会叫它为碎片?直到前段时间因为工作需要,从头看来一遍Fragment的源代码,然后就有了本文。

本文将从commit开始一步步带你走向Fragmnt的生命周期!!

阅读更多

Android 仿当乐游戏详情页面(三)


在上两篇文章中,我们已经实现了基本的界面的布局和移动效果,但是mImgShotViewmContentView却不能响应事件,而事件的响应就需要我们手动进行事件分发!

android 仿当乐游戏详情页面(一)
android 仿当乐游戏详情页面(二)
android 仿当乐游戏详情页面(三)

阅读更多