


黄明
熟练使用eclipse开发android软件,做了一年半JAVA WEB 和半年的android 的软件开发设计,平时注重团队精神,喜欢与客户和同事沟通,能理解的客户需求,快速的学习能力,熟悉android网络编程技术,线程,熟练运用android四大组件,Android各种API的使用(短信,拨号,音视频播放、音视频采集、手势识别、动画,传感等),热爱编程事业,熟悉J2EE编程技术,了解Java
- 技术能力:
- 工作态度:
- 工作成果:

项目意向
研发工程师
980元
全程集中
北京
工作经验:
擅长技能:
JAVA
平台工作经历
其他工作经历
公司名称
北京网冠科技有限公司
在职时间
2008-12-01 ~ 2010-09-01
职位名称
java工程师
薪水
0/月
项目描述
软件/互联网开发/系统集成
个人职责
公司简介:
2008年12月---2010年9月
背景 工作性质: 全职 下属: 人:
职位级别: 中级职位(两年以上工作经验)
工作职责和业绩:
公司用户登录,查询员工信息,工作进度,内部博客管理,定时发送短信,生日提醒等实现简单的OA对接是企业定制的个人服务。
<1>实现用户登录,查询,对账号密码进行validate后,通过HttpURLConnection 发送数据给服务端,进行登录,登录后能通过Intent 保存用户名,用来后续的博文管理,发送消息等一系列操作,通过输入员工的姓名,或者部门,能查询员工的详细相关信息(照片,工作贡献),发送博播客, 必须将要传送到服务器的数据要转换成符合XML-RPC规范的XML格式,然后通过HttpURLConnection将数据发送出去,再通过调用getInputStream方法来获得返回的数据,可使用pull技术将返回的xml格的文件进行解析,发布成功就返回文章ID,在修改文章时成功就返回true等。
<2>短信定时发送,该程序中我主要用到了Android的四大组件,以及SharedPreferences和SQLite。首先 通过android.app.DatePickerDialog让用户选择日期,android.app.TimePickerDialog让用户选择时间(24小时制),发送号码可以手动,也可以使用内容提供者来获取系统通讯录信息,地址是: content: //com.android.contacts/contacts。将用户设置的具体时间、发送人号码、以及短信内容通过SQLite数据库进行保存,其中有一个字段用于标示该信息是否已发送。软件参数配置我采用的是SharedPreferences。在该系统中的定时发送功能主要是通过android.app.AlarmManager类设置一个闹铃服务,在当系统时间到达用户指定的发送时间时系统会发出一个广播(BroadCast)以激活注册了闹铃服务的程序。通过AlarmManager类中的ELAPSED_REALTIME属性设置当闹铃时间到达时而手机又关机状态,此时放弃该闹钟,(以后将增加开机提醒功能,当某个闹钟因手机关机而没有发送时,等用户开机时予以提醒)。最后设置该程序随机启动,通过设置一个广播接收者来接收系统启动完成后发出的广播,该意图是ACTION_BOOT_COMPLETED,所以该检测系统开机广播的intent过滤器中应设置从而达到随机启动的目的,当系统接收到ACTION_BOOT_COMPLETED 这个意图的广播后3分钟(不在开机后马上运行主要是考虑到减小CPU的压力)启动程序,查询当前时间以前有没有还未发送的信息(该信息已达到发送要求),如果有,就启动通知NoticeActivity,如无,则立即finish()当前Activity。
<3>生日提醒,类似短信发送。我们能通过对员工相关信息的查询订阅此关注员工或者通过自定义输入朋友生日信息,保存在SQLite中并设置闹铃进行提醒。
<4>实现新闻等资讯版块,使用文件,sqlLite,SharedPreferences,xml,在本地得到的信息量小而且还不能及时更新,在3G的网络时代下,我们的应用或多或少都离不开网络,在这我们使用xml格式向客户端通过HTTP请求的方式从服务器获取以web站点以XML数据格式返回的最新数据(资讯),因为使用Dom解析方式解析xml会内容大时会导致内存崩溃,所以这里使用android自带的Pull技术完成对XML数据的解析,解析后的数据使用ListView显示,此外xml数据的传送相比JSON而言比较损耗系统的性能,建议以后做网络数据传输的话使用JSON格式进行传送。
<5>实现手势酷炫翻页效果效果,自定义一些手势获的手势库文件部署在自己的应用, 实现OnGestureListener()监听,使FrameLayoutgestureOverlayView显示在界面上,部署后通过设置addOnGesturePerformedListener()利用手势库的相似度,根据用户在屏幕上手指轻点,按下等操作得到最匹配的手势,来实现注册页面跟主界面以及其它界面的切换,此外给用户提供一个自定义手势库的界面,让用户体实现各种酷炫的手势实现软件中的各种功能。
个人练习与开发总结:
<1>音视频播放,需要解决电话来电时暂停播放,并在挂断电话时继续播放功能。实现方式如下: 当电话来电时,会激活来电号码显示Activity,新Activity的打开会导致视频播放器activity生命周期方法onPause()被系统调用,可以重写onPause()方法,在方法里保存视频当前播放的位置,然后停止播放。在来电号码显示Activity关闭后(挂电话)从保存位置继续播放。
<2>完成自定义组件,在实际应用中android给我们提供的View组件往往不能满足我们的需求,显然这时候就需要我们自定义组件了,自定义组件,我们只需继承你需要自定义view组件,复写Ondraw 方法 ,就能利用cavas进行绘画出需要的效果,定义好了后背景一定要设为透明状,不然还会显示边框。
<3> 复杂代码不能写在主线程UI的界面上如果主主线程运行5秒还没执行完任务的话会报程序响应异常 通过开启一条子线程 利用handler向主线程发送消息达到更新UI界面的效果。
<4> frame动画,启动Frame动画的代码animationDrawable.start();不能应用在OnCreate()方法中,因为在OnCreate()中 AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画,只能看到第一张图片,我们需把启动方法写到别的状态下。
<5>在Android中,每次广播消息到来时都会创建BroadcastReceiver实例并执行onReceive() 方法, onReceive() 方法执行完后,BroadcastReceiver 的实例就会被销毁。当onReceive() 方法在10秒内没有执行完毕,Android会认为该程序无响应。所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束BroadcastReceiver就先结束了。BroadcastReceiver一旦结束,此时BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死。所以采用子线程来解决是不可靠的。
<6>对错误的处理我们需要注册一个OnErrorListener来对如格式错误,文件不存在的错误处理可以更好的提高用户的体验度,用拖动条提供用户的拖动播放功能,当MediaPlayer处于Prepared,Started,Paused,PlaybackCompleted状态的时候就能掉用SeekTo方法,播放置顶位置的音乐,或者视频。使用SeekBar的时候通过使用setOnSeekBarChangeListener()方法,处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入,通过getProgress()方法获取值,通过setProgress()设置当前值显示
<7>视频文件断点续传.原理: 当从服务器下载文件时,可以通过http中的头字段RANGE指定从文件的什么范围开始下载,然后使用RandomAccessFile类保存文件, RandomAccessFile类的seek(nPos)方法可以指定每条线程从文件的什么位置开始保存数据,为了加快下载速度,采用了多线程下载,先计算出每条线程应该从文件的哪个位置开始下载,当所有线程完成下载之后,文件数据就写入完整。采用多线程下载之所以快,是因为其抢占了更多的服务器资源,下载就会快些。断点数据采用SQLite数据库存放,记录了文件的下载路径,每条线程的id和每条线程下载的数据长度。发送到服务器的http协议部分如下: GET /music.mp3 HTTP/1.0 RANGE: bytes=[crit]111111[/crit]-[crit]222222[/crit]
使用技能
无
教育经历
院校名称
北科院
毕业时间
所学专业
通信工程
最高学历
本科