您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 安卓学习心得体会(精选多篇)
安卓学习心得体会(精选多篇)android学习心得-----093380117计算机应用张峰1.关于activity1.在一个activity中使用多个view如果把activity看作mvc中的control?它负责管理ui和接受事件,虽然说一个activity通常对应一个屏幕,但事实上,我们是可以只用一个activity管理多个不同的view来实现简单的逻辑。首先,我们增加一个新的资源描述layout/second.xml。除了一个“hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为hellotwo增加两个方法,setviewonecommand和setviewtwocommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器最后,我们需要在oncreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。2.还是回到正道上,多个activity之间的跳转android中提供一个叫intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,intent的用法比较复杂,现在我先看看它最简单的用法。这里的跳转功能用intent来操作,它的最简单用法就是用函数setclass()设置跳转前后两个activity类的实例,然后调用activity自己的startactivity(intent)即可。最后一句finish()表示将当前activity关掉。然后,我们同样弄一个activity类hellothreeb,代码与前面的差不多,只是将setclass的两个参数反一下,这样就可以简单地实现在两个activity界面中来回切换的功能了。2.关于intent的使用intent分为两大类,显性的和隐性的。一般来说,intent要定位事件的目的地,无外乎需要以下几个信息:1.种类,比如我们常见的launcher_category就是表示这是一类应用程序。2.类型,在前面的例子中没用过,表示数据的类型,这是隐性intent定位目标的重要依据。3.组件,前面的例子中用的是setclass,不过也可以用setcomponent来设置intent跳转的前后两个类实例。4.附加数据,在contenturi之外还可以附加一些信息,它是bundle类型的对象。其实,如果是在一个应用内部,这种隐性的intent实在有点别扭,个人觉得,这种松藕合的实现方法,只适用于那些较大的系统或者多个不同的应用之间的调用,可手机上又有什么“较大”的系统呢?无非是可以与不同来源的多个应用之间方便地互操作而已,那么会是什么样的场景呢?比如,给qq好友发送gmail邮件,用googlemap查找qq好友所在的位置?看上去挺不错的。关于这个contentprovider,其实还有话说,它主要是的那些看似数据库操作的方法我们都没真正去实现呢。不过今天就到这里了,等下回再去研究吧。3.关于listactivity准备一个list对象并借助adapter就可以构造出一个列表。重载onlistitemclick方法可以响应选择事件,利用第一个参数可以访问到这个listview实例以得到选中的条目信息。这里有一点要说明的,就是如果更简单的话,其实连那个setcontentview都可以不要了,android也会自动帮我们构造出一个全屏的列表。但是本例中我们需要一个textview来显示选中的条目,所以我们需要一个layout.mainb描述一下这个列表窗口。这里需要注意的是那个listview的id,是系统自定义的android:list,不是我们随便取的,否则系统会说找不到它想要的listview了。然后,在这个listview之外,我们又增加了一个textview,用来显示选中的条目。再来说说这里用到的arrayadapter,它的构造函数中第二个参数是一个资源id,arrayadapter的api文档中说是要求用一个包含textview的layout文件,平台用它来显示每个选择条目的样式,这里的取值是r.layout.list_row,所以,我们还有一个list_row.xml文件来描述这个布局,相当简单。从arrayadapter上溯到baseadapter,发现还有几个同源的adapter也应该可以使用,象simpleadapter和cursoradapter,还是做个例子来实验一下吧。然后,在hellotw(请你继续关注好范文网:)ob中的oncreate函数中,修改代码,有几个不同:items的元素是hashmap实例,这是一点变化,然后构造函数除了要求items以外,还要求提供一个string来说明用hash表中的哪个字段显示在列表中,而后是一个资源id的数组。因为单纯的cursoradapter是抽象类,所以我用的是它的子类simplecursoradapter,很好理解,先用contentresolver查询通讯簿得到一个游标,然后告诉simplecursoradapter要用其中的people.name作为显示项来构造出一个adapter即可。4.关于dialog注意到android.app包下除了dialog以外,还包括了几个系统定义好的对话框类,如datepickerdialog、timepickerdialog及alertdialog。其中alertdialog我上回用过一次,基本上就那样子了,今天看看另外两个对话框的使用吧。很简单的,无非是需要一个ondatesetlistener接口的实现而已,在它里面的dateset方法中就可以得到选择的日期了。而timepickerdialog与datepickerdialog使用如出一辙。看看另一个progressdialog的用法吧,这个类与alertdialog一样包含了多个static的方法,所以使用起来是非常方便的。比如说,如果我们需要用它来表示一个长时间的操作。5.关于service和notification大略地看了一下android.app下的service类,觉得它与activity非常相似,只是要注意几个地方:1.生命周期,service的从oncreate()-onstart(int,bundle)-ondestroy()显得更为简单。但是它的onstart是带参数的,第一个id可用来标识这个service,第二个参数显示是用来传递数据的了。比较activity,传递数据的bundle是在oncreate就带进入的。2.service的启动由context.startservice开始,其实activity或者service都是context的派生类。结束于context.stopservice()或者它自己的stopself()。3.service还有一个与activity不一样的是它可以由另一个context去绑定一个已存在的service。就是这个方法context.bindservice(),被绑定的service要求是已经oncreate了但可以没有onstart。在service类中有个抽象方法getbinder()可以得到这个ibinder对象。关于这方面的细节,以后再看,这里只做个记录罢。4.与service有关的还有一个安全的问题,可以在androidmanifest.xml中用标签来声明一个service的访问权限,关于android的安全问题也留待以后再解决吧。6.gridview与imageview简单一点吧,就瞧瞧那个grid的效果,android提供了一个gridview,不过从apidemo中看来,它似乎与pc上的grid差别还是挺大的,更像那个iconview的感觉。不知道android中如何实现表格界面?虽然在移动终端上,表格一般不会有谁使用,大家似乎更倾向于使用listview,而android对于listview则有更简单的实现listactivity。很简单,只要重载几个方法就可以了,关键是那个getview方法,它负责构建出每个单元格中的对象实例。这里我们构造的是一个imageview实例。然后就是同样的将这个adapter赋给gridview即可,大家可以看看效果,注意在做这个例子前,先放几个小图片到res/drawable目录下,buildproject一下就可以得到那个r.drawable.a了。在getview方法中我们使用了imageview类,这又是一个widget。除了上面用到的几个方法以外,还有以下几个方法值得注意:与图像来源有关的方法,我们只用了资源文件的方式。还是习惯性跑题了,其实,我是想通过我对这个类的无数次debugger跟进,说说它的多线程异步处理的解决策略的。他的基本策略如下:1.当你实例化一个asyncqueryhandler类时,它会单件构造一个线程,这个线程里面会构建一个消息循环。2.获得该消息循环的指针,用它做参数实例化另一个handler类,该类为内部类。至此,就有了两个线程,各自有一个handler来处理消息。3.当调用onxxx的时候,在xxx函数内部会将请求封装成一个内部的参数类,将其作为消息的参数,将此消息发送至另一个线程。4.在该线程的handler中,接受该消息,并分析传入的参数,用初始化时传入的contentresolver进行xxx操作,并返回cursor或其他返回值。5.构造一个消息,将上述返回值以及其他相关内容绑定在该消息上,发送回主线程。6.主线程默认的asyncqueryhandler类的handlemessage方法会分析该消息,并转发给对应的onxxxcomplete方法。7.用户重写的onxxxcomplete方法开始工作。这就是它偷偷摸摸做过的事情,基本还是很好理解的。我唯一好奇的是它的线程管理方式,我猜测他是用的单件模式。第一个asyncqueryhandler的实例化会导致创建一个线程,从此该线程成为不死老处男,所有的contentresolver相关的工作,都由该线程统一完成。个人觉得这种解决方式很赞。本来这个线程的生命周期就很难估量,并且,当你有一个contentprovider的请求的时候,判断你会做更多的类似操作并不过分。就算错了,花费的也只是一个不死的线程,换来的却是简单的生命周期管理和无数次线程生死开销的节约。同时另外一个很重要的问题,他并会涉及到单件中数据同步的问题,每个类都有各自的handler类,彼此互不干扰,分发可以分别进行。当多个数据请求的时候,在同一个contentresolver上进行的可能微乎其微,这就避免了堵塞。总而言之,这套解决办法和android的整体设计算是天作之合了。所以建议,如果你有什么非contentprovider操作,却需要异步多线程执行的话,模拟一套,是个不错的策略,当然,具体情况具体分析,生搬硬套是学不好马列主义的。7.显示控件使用android的界面显示同样也是基于控件的。通常是用view控件配上xml的样式来做的。具体细节不想说了,可以参考samples里的apidemos/view,和view的doc,以及implementingaui这篇doc。其他还有很多,感觉算是sdk讲述的最多的内容。从控件的使用上,和网页的设计类似,尽量用parent_width之类的抽象长度,用theme来做风格,抽取所有的字串等信息做本地化设计。相关内容参看implementingaui就好。一类比较重要的是数据绑定控件。如果做过asp.net会从中看到很多类似的地方。一个支持数据绑定的控件,比如listview。可以通过一个listadapter绑定到一个数据源上。listadapter是一个抽象类,主要的实现类包括simpleadapter和simplecursoradapter。前者是绑定一个静态的array,后者是绑定一个动态的cursor。cursor前面说过,是一个指向数据源的随机迭代器,将view绑定
本文标题:安卓学习心得体会(精选多篇)
链接地址:https://www.777doc.com/doc-5628925 .html