android工作随笔(第一季)

1,AsyncTask的使用可以更方便管理线程。

2,适配器使用时要利用缓存。即public final class ViewHolder的使用

3,Visibility的使用常常带来意想不到的效果(Gone,Visible,Invisible)

4,是否使用WebView取决于资源的传递方式:有Url地址的。

5,ScrollView与ListView结合使用常常会打架。知道ListView的高度,并且把ScrollView的android:fillViewport="true"时ListView才会正常。

6,ListView黑影消除的方法 android:cacheColorHint="#00000000"

7,Gravity与Layout_Gravity的区别:Gravity能让textView中的文字居中显示,而Layout_Gravity能让TextView居中显示。

8,一个系统中,在一个个工具类提供所有使用的常量,方便管理。常量的定义final static

9,xml协议的解析和发送,特殊字符的传递,有时候可以加密成UTF-8进行传递。

10,三目运算的使用

11,List的泛型使用Arraylist LinkedList

12,局部变量与全局变量的使用。

13,“Object... params”   J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参

14,dispatchKeyEvent与onKeyDown的区别

15,this,的范围局限在当前的Acitvity,而getApplicationContext的范围更广,是当前应用的上下文。

16,ListView的分页加载通常是在写C/S程序的时候考虑客户端性能的时候用得着。要实现两个方法onScroll和onScrollStateChanged在onScroll方法里可以得到最后一条记录的索引:lastIndex = firstVisibleItem + visibleItemCount - 1,然后在onScrollStateChangged中判断lastIndex == adapter.getCount()时进行加载,加载的条数自己规定。

17,android提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。这样就解决了子线程更新UI的问题。但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。因此android提供了一个工具类AsyncTask,顾名思义异步执行任务。

正确的使用AsyncTask类,以下是几条必须遵守的准则:

      1) Task的实例必须在UI 线程中创建

      2) execute方法必须在UI 线程中调用

      3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法,需要在UI线程中实例化这个task来调用。

      4) 该task只能被执行一次,否则多次调用时将会出现异常

      doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。

对于onpreExecute该方法在执行实际的后台操作前被UI线程调用,可以实例化一些控件,也可以显示一个进度条。onPostExecute也是主线程调用,后台的计算结果通过该方法返回给主线程。并且在界面上展示给用户


AsyncTask定义了三种泛型类型 Params,Progress和Result。 
Params 启动任务执行的输入参数,比如HTTP请求的URL。 
Progress 后台任务执行的百分比。 
Result 后台执行任务最终返回的结果,比如String。 


18,对带有<a href=.......>超链接的文字用html封装好的方法。

19,在java中,内存的分配与释放是采取收支两条线的。支是由程序员手动去new 一个对象的时候才会分配内存。而收是由GC(garbage collection垃圾收集器)来完成的,为了能够正确监控每个对象的运行状态以便正确释放对象,GC对对象的申请,引用,被引用,赋值等操作都要进行监控。只要对象不可达(没人引用它了)那它就会被GC回收。如果某个对象可达(有人在引用它),但是对象是无用的,就是以后不会再使用了,那就会导致内存泄露。

20,android:divider="@drawable/line"更改ListView的分割线。

21,做手势识别事件处理的时候,一定要把触屏事件交给手势识别类GestureDetector来处理。否则会很麻烦。

22,return (list!=null&&list.size()!=0)?list.get(0):null;这个用的相当牛逼。

23,对于属于ActivityGroup的Activity里的onActivityResult方法是执行不了的,所以在start的时候用getParent去调用,然后在父的里接收。

24,一对requestToken和RequestSecret的verifer是唯一确定的,所以不能分开。

25,解析xml文件的三步骤:从服务器获取流,解析,封装到实体类。

       a ,利用HttpClient协议,获得流

b,实现一个DefaultHandler,进行解析( Xml.parse(is, Encoding.UTF_8, userHandler))

c,根据标签做各种事情,比如startElement时进行实体类初始化等。

在用sax解析xml文件的时候,  public void characters(char[] ch, int start, int length)每次会读取2kb的内容送进ch进行解析,当解析的内容比较多超过2kb的时候,最后加载进来的内容会覆盖原来的,所以导致解析出来的内容不全。结局的办法就是把每次解析出来的内容用StringBuffer缓存起来。

26,新浪微博的认证步骤:

a,根据获得到的appkey(requeseToken)和appsecret实例化一个httpOauthprovider出来,再根据三个网址构造出一个httpoauthprovider出来。

b,根据httpOauthprovider.retrieveRequestToken(httpOauthConsumer, callBackUrl);返回一个Url地址,根据这个地址来调出认证界面,认证界面最好是自定义一个webView除了自带的浏览器之外,,第三方浏览器不会跳转。对于callBackUrl,是将要接收认证成功返回后的intent的activity路径。只要在目标activity中注册一个过滤器。

c,在目标activity中实现onNewIntent方法,其中返回后的intent中是有个uri对象的,获得后,可以从中取得verifier的Uri uri = intent.getData();,String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);当获得verifier后,在利用httpOauthprovider发出请求 httpOauthprovider.setOAuth10a(true);


            httpOauthprovider.retrieveAccessToken(httpOauthConsumer, verifier);我们的目标是把userId和accessToken和accesssSecret获取到。这时还差两步,要把userInfoSet获取到,因为userInfoSet.first得到的值就是userID,httpOauthprovider.getResponseParameters().get("user_id");这样就能得到了。而根据httpOauthConsumer.getToken();和httpOauthConsumer.getTokenSecret();就能得到所要的了。这是只要保存这三个值就大功告成了。

注:有两步比较相像:一个是获取认证页面的地址时httpOauthprovider.retrieveRequestToken(httpOauthConsumer, callBackUrl),还有一步应该是获得accesstoken和accessSecret的时候,httpOauthprovider.retrieveAccessToken(httpOauthConsumer, verifier);,很相像。

d,最后是分享:分享一般分享的是图片和视频,标题不用处理,图片分为静态图与动态图。静态的deawable-->bitMap--->Byte[]用这个字节数组构造一个ImageItem出来,利用weibo.uploadStatus(title, imageItem);就分享出去了。如果是动态图片的话,就要下载下来,如果有sd卡的话,就下载到sd卡里,没有的话,下载到内存,首先要判断内存够不够用,不够用就提示内存不足,不给分享。利用status = weibo.uploadStatus(msg, file);分享出去。至于这个weibo对象的获取就是借助我们之前得到AeccessToken和AccessSecret来获得的,视频的话直接给地址就行了。Weibo weibo = OAuthConstant.getInstance().getWeibo();
            weibo.setToken(accessToken, accessSecret);大功告成!!!!!!!!!!!!!!!!!!!

27,字体的设置:


28,将inputstream转换成String:

public String convertStreamToString(InputStream is) throws IOException {
       /*
         * 为了将InputStream转换成String我们使用函数BufferedReader.readLine().
         * 我们迭代调用BufferedReader直到其返回null, null意味着没有其他的数据要读取了.
         * 每一行将会追加到StringBuilder的末尾, StringBuilder将作为String返回。
         * 
         */
        if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;
 
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {       
            return "";
        }
    }


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值