android开发心得

        最近一直忙于学习和技术,没有来的急写点东西,我是2010-09-01日刚步入android开发,当时根据公司的要求和安排,我被作为android开发的一员,总算几个人的努力,终于把一个小项目完成了,但是我认为还是有一些bug,后期还得改善一下。现在我就把历时将近1个半月的android开发心得简单总结一下,望对有部分即将或正在进行android开发的人员有一点点作用。

        从android开发最值得我有感慨的是:遇到任何技术上的问题,不要去放弃,只是一个时间和不断去摸索的过程,最终会有一个很好的解决方案!

       数据线程问题的处理:比如说,我做这个外汇小项目,当时采用socket技术从服务器接收数据都无法做到,不是技术方面的原因,而是一些细节问题没有处理好。服务器端是随便输入用户名和密码,就可以进入看到很多外汇数据的输出,但是刚开始怎么得不到,原来是要连续发两次请求,即用户名和密码,并且服务器有换行,要时刻等待接收服务器端发来的数据(最后采用计时器的方法来不断地保持连接服务器)等细节的处理。下面就是一些代码:

              // ===============访问服务器,接收数据=====================
    public void accessServer() {
        String message = "request" + "/r/n";
        try {
            socket = new Socket(SERVERIP, SERVERPORT);
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                    socket.getOutputStream())), true);
            out.println(message);
            out.println(message);
            br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()), 1024 * 10);
            msg = br.readLine();
            while ((msg = br.readLine()) != null) {
                Message mess = new Message();
                mess.obj = msg;
                mess.what = 1;
                handler.sendMessage(mess);
            }
        } catch (Exception e) {
            Log.i("errors", e.toString());
        }
    }

 

  为了得到服务器数据,都花费了4-5天的时间,这是我要负责的工作,当时我也是初次用socket的一些原理,根本都不懂,当然我也没有什么开发经验,遇到这个问题,只有自己去慢慢测试。我只要在android写一个客户端的接收数据的处理就行,上面就是,虽然上面的代码看起来很简单,是的,之前没有出来结果的那种感觉真的认为比较难,问题解决了就知道原来这么简单,我相信很多人都有这种开发的感受。

         当上面的问题解决了之后,也即得到数据之后,怎么让它在android视图上很好的显示出来,又是一个问题,因为外汇这种数据要保持实时数据更新,服务器来一条跟当前的数据作比对,是否有更新,有就更新掉,没有就不变,这种同步的实时更新,真的是让人头痛,通过网络的帮助和那些android开发技术的陌生人群去讨论,采用Handler线程处理,写自己的适配器。(有部分代码略)终于解决了这个问题.解决的代码如下:

// ==================================准备数据线程==================================
        // 通过设置Timer计时器连接服务器得到数据
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (socket == null || !socket.isConnected()
                        || !socket.isInputShutdown()) {
                    accessServer();
                }
            }
        }, 0, 10 * 1000);

        handler = new Handler() {
            public void handleMessage(Message mess) {
                switch (mess.what) {
                case 1:
                    msg = (String) mess.obj;
                    if (msg != null)
                        s = msg.split(" ");
                    int findex = 0;
                    for (HashMap map : fillMaps) {
                        if (map != null && map.get("forex") != null
                                && map.get("forex").equals(s[0])) {
                            if (!(map.get("bid").equals(s[1]))) {
                                if (Double.parseDouble((String) map.get("bid")) < Double
                                        .parseDouble(s[1])) {
                                    isDownUp[findex] = true;
                                } else {
                                    isDownUp[findex] = false;
                                }
                                map.put("bid", s[1]);
                                map.put("ask", s[2]);
                            } else if (!(map.get("ask").equals(s[2]))) {
                                if (Double.parseDouble((String) map.get("ask")) < Double
                                        .parseDouble(s[2])) {
                                    isDownUp[findex] = true;
                                } else {
                                    isDownUp[findex] = false;
                                }
                                map.put("ask", s[2]);
                            }
                        }
                        fillMaps.set(findex, map);
                        findex++;
                    }
                    showCurrencyPair();
                    break;
                default:
                    break;
                }
            }
        };
    }

通过这个问题的解决,我的心得是:遇到问题一定去寻求方法,比如:网络(百度,google,QQ等工具)真的是很不错!问题解决效率会很高。其次是多加人一些这方面的开发群,结实一些android开发技术人员,这个真的很重要,一可以锻炼你的沟通能力,二又可以多认识一些这方面的技术人员,这是一个远期和永久的资源,并且可能成为开发上的很好朋友。


         android布局:在项目开发中,为了实现自己的需求和布局,要好好考虑一下布局的设置,特别是视图的每一个属性的正确使用与否,都有可能让你的效果出不来,要不断地尝试,为什么效果出不来,可以多方面的尝试,比如多换换布局属性的设置。其次根节点的设置,很重要,这由可能直接导致你的布局出不来,所以你的子节点布局怎么设置,都没有效果,有的属性设置直接失效,这很有可能导致你的效果出不来的根本原因。当一些效果出不来的时候是否是布局用的不对,或者是否要嵌套一个布局,最常见有几种,在这里不列举了。最后,要考虑的是你的程序在各种手机上运行,视图是否可以自适应手机屏幕布局大小,这跟你的视图设置很有关系,特别是布局的内容或者控件很多的时候,你很有可能就设置高度和宽度,但是设置后,你的应用程序在手机小的屏幕上不一定能都显示出来,这要靠你自己去好好设置布局,最好的一般都是fill_parent和wrap_content,这样自适应大小,有的还要自己写视图来控制大小,当然网络上有很多不同的解决方案。最后,在视图方面,不管怎么样,一定要多尝试一下,测试不同的效果是怎么样。直到自己满意为止。

        资源的管理(res目录):把项目中能用资源来配置的,尽量用资源去配置,这样有什么问题,好调试和维护,也解决了代码臃肿或冗余的问题,这样大大解决了程序的代码长度,以后维护简便,当然自己还可以在其目录下增加辅助目录,便于区分功能管理。

        最后,不管怎么样,都不要放弃,要相信问题很快能解决的理念。当然,不要在一个方法上吊死了,这样很浪费时间和精力,多和技术人员交流探讨,最终采用什么样的技术点去解决问题,使其达到最优化效果,再次警告:不要在一个问题上去花费很多时间和精力,说不好明天一大早上班就解决了,呵呵~~。在这里,还有很多项目开发的细节我就不一一说了,相信大家都有自己的细节处理,还有很多android开发遇到的细节问题,网上很多,大家遇到的时候可以去搜索一下,多总结一下!以后就不会再犯这样的错误了。虽然有的时候很低级的错误避免不了,但是不要多次发生。还有最后一点是:不要认为这个问题很简单,就不敢问或者交流,但是自己首先必须尝试考虑和思考解决,确实解决不了了,再去问别人,这样你会发现效果就是不一样,受益匪浅。好了,我今天就写这么多了,有时间我会多写写这样的心得,不管有什么作用,对自己是会有好处的。我也希望大家不要一味的去开发,有的时候静下心来写点东西会有很好的感觉和心情!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值