- 浏览: 806673 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huan19900606:
像haskell这些脚本语言很容易定义DSL,实现对应的词法语 ...
DSL的基本介绍(groovy来进行构建) -
express_wind:
https://yq.aliyun.com/album/130 ...
qlexpress规则引擎初探 -
readxuxuegang:
博主你好。如果groovy的代码是保存在数据库里,不是文件,这 ...
在java中使用groovy怎么搞 (java and groovy) -
express_wind:
hi,兄弟,有没有兴趣来阿里巴巴专门做这方面的研究,https ...
qlexpress规则引擎初探 -
langcaiye:
有2个问题请教:1. 这里的base32算法为什么需要以负数的 ...
【原】geohash算法详解
最近公司组织进行无线开发大赛,旨在提升团队的无线开发能力,还有大奖呵呵,抱着学习的态度,也没想拿奖,就一个人报名了,服务端和客户端自己搞定,作为服务端开发经验丰富,一天多的时间就搞定了,但是android的开发花了很多时间,中间有很多坑,最后也算能够交差了。
开发环境搭建就不写了,网上资料很多,大致就是下载android 的SDK,添加android开发的eclipse插件,然后eclipse中关联SDK,就OK了。
(1)请求http接口,网络权限问题
这是遇到的第一个问题,之前纳闷android是如何发起网络请求的,搜了些文章发现原来是通过httpclient,然后写好httpclient代码,但是请求不到服务端,找了半天,原始是android的这个文件AndroidManifest.xml,需要开通权限。
在android中通过Httpclient请求外部的服务是,会报这个错误java.net.UnknownHostException,原因是代码中没有设置访问网络的权限,在AndroidManifest.xml中添加这个配置即可 <uses-permission android:name="android.permission.INTERNET"/>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add( new BasicNameValuePair( "userId" , String.valueOf(userId)));
params.add( new BasicNameValuePair( "dateId" , String.valueOf(dateId)));
String param = URLEncodedUtils.format(params, "UTF-8" );
//这个大家都懂,添加参数
HttpClient client = HttpClientUtil.getHttpClient(); HttpGet get = new HttpGet(AppConstant.DOMAIN+param);
HttpResponse response = client.execute(get); BufferedReader reader = null ;
HttpEntity entity = response.getEntity(); reader = new BufferedReader( new InputStreamReader(entity.getContent(), "gbk" ));
//获取Content,然后创建stream StringBuilder sb = new StringBuilder();
for (String s = reader.readLine(); s != null ; s = reader.readLine()) {
sb.append(s);
} |
(2)activity没有熟悉例子,只是想到啥就做啥
在做产品规划的时候,没有设计,自己想到啥就去做啥了,页面也是这样,基本上想到啥样就去调整了, 现在想来,这是一个失误,应该把之前android支持的组件先熟悉一遍,能够做到灵活运用,这样就好了。。。
(3)依赖外部的jar包,如何打入到apk中
android中如果要添加外部的jar包,需要把jar包拷到libs目录下面,否则如果仅仅关联了classpath,那样运行在模拟机上的话会报错,java.lang.NoClassDefFoundError这个异常。当时怀疑,android项目是这样来添加jar包的?岂不是很低级?升级一次jar包会是一件头疼的事情,然后网上找了一下,maven官方没有提供工具,android也没有,但是开源有个插件 maven-android-plugin,能够把android构建成maven项目,这样添加jar包,导入apk文件,是一件很容易的事情。
(4)MTOP怎么使用(MTOP 一淘无线团队的开放平台,提供了复用的组件)
app中有个淘宝账号登陆的功能,当时觉得麻烦,打算复用一淘无线团队中的组件,了解了半天,发现接入起来太费劲,要申请一些列东西,就放弃了。但是了解的这个过程还是有收获,后续开发,尽量把公共功能组件化,减少开发成本,然后api接口的话设计灵活巧妙。
(5)关于退出app
关于应用退出这个功能,自己在使用app的时候,比较喜欢按两次back键来完成退出,然后打算自己在功能中实现这个。在晚上找了一下,基本上是这种代码,说的比较简单,“监听back事件,然后把activity状态变为finish”,
但是在写完代码后遇到一个问题,就是只能退出当前的activity,连续双击后,展示出了这个activity的上一个activity,这个有点体验不好,然后继续找资料,最后的解决方案。
A、搞了一个父类,继承Activity,然后其他自定义的Activity实现这个基类,基类中重写onCreate这个方法;
B、在onCreate方法中,构造单例,把当前的Activity对象添加到列表中;
1
2
3
4
|
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
ActivityList.getInstance().addActivity( this );
}
|
C、然后在父类中监听onBackPressed这个事件,就是点击“back”的操作;
D、符合退出条件的情况下,在单例中,把存储在列表中的activity对象依次finish,这样就实现退出了;
1
2
3
4
5
6
7
8
9
10
11
12
13
|
long waitTime = 2000 ;
long touchTime = 0 ;
//监听后退按键
@Override
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if ((currentTime-touchTime)>=waitTime) {
Toast.makeText( this , "哈哈,再按一次,就退出瞄过往了" , Toast.LENGTH_SHORT).show();
touchTime = currentTime;
} else {
ActivityList.getInstance().exit();
}
}
|
(6)handle机制
在App中有种情况,就是请求网络中的数据,这一步是很耗时的,所以就想异步来做,自己就new Thread来请求数据,把数据放到缓存中,但是有个问题,就是需要搞一个“加载中”的提示,当时以为很简单,在new出来的线程中调用了一下ProgressBar的消失方法,但是运行的时候抛出异常,说是不能new线程,但是反复试了很多办法,但是没有解决。
此时,就想把加载数据改成同步,这样就不会有问题了,但是试了一下,在等待网络请求的时候,超过5秒的时间,android就会弹出层,说是系统没响应,是否要强制关闭。
于是有开始想办法,此时找到了这篇文章:http://www.pin5i.com/showtopic-android-handler.html
原来关于Activity的相关UI操作,只能由主线程来进行(因为是非线程安全的)。Handler就出现了,来解决这个复杂的问题 , 由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。
继承Handle类:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper L) {
super (L);
}
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
super .handleMessage(msg);
MainActivity. this .dialog.dismiss();
}
}
|
然后在异步线程中调用Handle来传递数据,完成UI的变化:MainActivity.this.handle.handleMessage(null);
(7)android中的异步
在这次APP中,异步的任务是通过new Thread的方式来进行的,虽然问题解决了,但是觉得有点山寨,搜了一下,发现android中提供了方案AsyncTask来满足这个需求。
子类必须实现AsyncTask中的doInBackground(Params...)这个方法。
AsynTask类在继承时要传入3个泛型。第一个泛型对应execute()向doInBackground()的传递类型。第二个泛型对应doInBackground()的返回类型和传递给onPostExecute()的类型。第三个泛型对应publishProgress()向progressUpdate()传递的类型,这个是用来通知主线程,例如数据加载进度等。
(8)数据的埋点
这次app中,为了了解用户的使用情况,在友盟哪里找了个工具,把系统的埋点做了下,在Activity中,有各个状态,resume和pause,然后在父类中添加埋点,剩下的事情交给友盟去做了,然后既可以在友盟提供的页面上看到数据了。友盟获取机器的UMID信息后,然后结合配置文件中的appkey,既可以定位唯一的一台机器,然后结合埋点数据,分析出结果,个人觉得很好用,接入一个小时就够了。
1
2
3
4
5
6
7
8
|
public void onResume() {
super .onResume();
MobclickAgent.onResume( this );
}
public void onPause() {
super .onPause();
MobclickAgent.onPause( this );
}
|
发表评论
-
系统分布式情况下最终一致性方案梳理
2015-09-05 19:34 40962前言 目前的应用系 ... -
Storm核心概念剖析
2015-03-20 20:42 3228最近团队中有分析的场 ... -
池和流的两种数据处理方式
2014-11-19 22:59 1394在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流 ... -
关于CodeReview(java)
2014-10-29 20:42 1908关于codereview,在平时的开发中,经常忽略的环节,参 ... -
java中各种各样的数据结构
2014-07-13 20:26 2467在java中,有非常丰富的数据结构,可能是因为大多数的软件 ... -
关于JVM的ClassLoader(笔记)
2014-07-13 12:19 1875众所周知,java是编译型的语言,写的是java文 ... -
关于事务的几个概念介绍
2014-06-06 22:22 1944啥是事务? 有一组操 ... -
开发中遇到的编码问题
2014-05-22 19:39 18841、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ? 因 ... -
ThreadLocal源代码解析
2014-04-24 17:54 2408最开始的时候,理解的ThreadLocal,我的理解是这样的 ... -
关于单例模式(代码篇)
2014-04-23 10:47 2419很早的时候,转发过一篇单例模式的文章:http://iamz ... -
今天遇到的两个spring相关的两个问题
2014-04-18 21:56 2561今天在项目中写代码,遇到两个Spring的问题,记录一下。再 ... -
Activiti中的命令模式解析
2014-04-11 13:10 3199最近在看Activiti的源代码,发现是基于命令模式进行的开 ... -
关于java中的本地缓存-总结概述
2014-03-31 19:00 18374java中的本地缓存,工作后陆续用到,一直想写,一直无从下 ... -
使用guava中的EventBus构建内存级别的事件引擎
2014-03-25 19:27 6408这个EventBus是guava中比较给力的一个类,从字面 ... -
DSL的基本介绍(groovy来进行构建)
2014-03-04 23:32 17055什么是DSL? 领域特定 ... -
qlexpress规则引擎初探
2014-02-25 22:28 25121qlexpress是啥? 这个是阿里内部的一个开源的jav ... -
在java中使用groovy怎么搞 (java and groovy)
2014-01-15 23:17 10961什么是groovy? 一种基于Java虚拟机的动态语言, ... -
java中记录方法调用时间,结果按照方法的层级树状的输出
2013-12-21 17:36 4686 在java中,最常用的埋点时间的方法就 ... -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
2013-12-14 22:21 41349这个是之前处理过的一个线上问题,处理过程断断续续,经历了两 ... -
令牌桶算法和漏桶算法以及流量控制浅谈
2013-11-27 23:20 20795 在双十一等大促环节,系统需要限流,外部 ...
相关推荐
系统的、循序渐进的学习Android开发所需的知识 n 第一部分:Android的入门基础 包括:Android是什么、有什么、能干什么,Android开发的环境构建、 HelloWorld开发,HelloWorld基本分析等 n 第二部分:Android应用核心...
这通常包括安装Eclipse IDE、Android SDK(软件开发包)、ADT(Android Development Tools)插件等。这些工具为开发者提供了强大的开发环境,支持创建、调试和测试Android应用程序。 - **Eclipse搭建NDK开发环境**...
在Android开发领域,初学者经常会面临许多挑战,如...以上只是对Android开发初学者可能遇到的一些关键知识点的概述,实际的压缩包可能包含更详细的教程、实例代码和练习,帮助新手逐步建立起自己的Android开发技能。
Android 逆向菜鸟速参手册骚动版 本手册旨在为 Android 逆向初学者提供一份详细的指导手册,涵盖了 Android 逆向的基础知识和技术。 一、环境搭建 1. Eclipse 搭建 Android 开发环境 2. Eclipse 搭建 NDK 开发...
在Android开发过程中,有时我们需要对已有的APK文件进行反编译,以便了解其内部工作原理、学习他人代码或者进行二次开发。这篇“Android菜鸟日记25-android反编译”将带你走进Android反编译的世界,揭示APK背后的...
总的来说,“菜鸟商城”源码是一个功能完备、注释详尽的Android商城应用实例,对于学习Android开发和实际项目经验的积累都有很大帮助。通过深入研究这份源码,开发者不仅可以掌握Android应用开发的基本技能,还能...
Android逆向菜鸟速参手册完蛋版_52pojie.pdf 作者允许传播
Android逆向菜鸟速参手册完蛋版_52pojie.pdf 由于大于60MB所以分为2个压缩文件
本项目"菜鸟微博"是一个基于Android的社交媒体应用程序,旨在为初学者提供一个学习和实践Android应用开发的实例。通过这个项目,我们可以深入了解Android SDK、布局设计、数据存储、网络请求等核心概念。 1. **...
《Android驱动开发权威指南》是一本深入探讨Android驱动程序开发的专业书籍,对于想要在Android系统底层耕耘的技术人员来说,这是一份不可多得的资源。该书内容详细且清晰,配有书签,方便读者查阅和学习。 Android...
在Android应用开发中,线性布局(LinearLayout)是开发者最常用的一种布局管理器。它按照垂直或水平方向将子视图(View)排列,形成一个单一的行或列。本系列教程将深入探讨线性布局的使用方法和技巧,帮助初学者更...
Android课程设计-计菜鸟裹裹app源代码+文档说明菜鸟裹裹主要包括1.支付宝快速登录2.支付宝注册3.手机淘宝登录,手机登录4.首页-校园认证5.首页-包裹搜索,首页-添加包裹6.首页-扫一扫7.首页-身份码8.首页-寄万物,寄...
Android从菜鸟到高手.doc
就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看 就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android面试题从菜鸟到高手,扩展就业面。值得看就业参考资料,Android...
菜鸟裹裹主要包括 1.支付宝快速登录 2.支付宝注册 3.手机淘宝登录,手机登录 4.首页-校园认证 5.首页-包裹搜索,首页-添加包裹 6.首页-扫一扫 7.首页-身份码 8.首页-寄万物,寄件 9.首页-更多 10.首页-收件,首页-...
### 傻瓜式Android APP开发入门教程 #### 一、准备工作 在开始Android应用程序的开发之前,我们需要准备一些基础的开发工具。本教程将详细介绍如何进行这些准备工作,...希望这篇文章能帮助您顺利入门Android开发!
Android逆向菜鸟速参手册完蛋版
安卓航班网还提供了多本Android开发书籍的下载链接,这些书籍覆盖了从基础到进阶的不同阶段,非常适合想要深入学习Android开发的读者。 #### 1. 四本很给力的Android书籍 这四本书籍是精心挑选的,涵盖了Android...
常用web开发工具 w3cschool菜鸟教程20141021常用web开发工具 w3cschool菜鸟教程20141021常用web开发工具 w3cschool菜鸟教程20141021常用web开发工具 w3cschool菜鸟教程20141021常用web开发工具 w3cschool菜鸟教程...