这篇文章不定期更新,总结在移动开发中至少困扰我一天以上的问题。
1.代理联网:
中国这个土鳖的网络环境下,我都不知道WAP是怎么产生的,我只知道,很多很多手机都默认支持WAP。大部分J2ME书本上,是绝对不会介绍代理连接的。在这方面,我走了不少弯路。
首先给出标准的模式:如果是代理上网,必须完成两点,1.你的请求url中应该设置代理服务器,2.你必须设置x-online-hos属性。
GameConst.HTTP_CMWAP = "10.0.0.172:80/"//代理服务器
conn = (HttpConnection) Connector.open("http://" + GameConst.HTTP_CMWAP + url);
conn.setRequestProperty("X-Online-Host",host);
这里要注意以上代码中的“url”,它是去掉主机以后的url,比如现在有一个全连接:http://blog.csdn.net/coding_or_coded,那么以上代码中的“url”就应该是coding_or_coded,千万不要尝试写为blog.csdn.net/coding_or_coded,这样的结果是:部分手机可以正常访问(手机底层帮你做了处理),部分连接可以正常访问(因为这种连接对应的服务器帮你做了url重定向),当然,不少手机,不少连接你都得不到有效的信息。
还要注意以上代码中的“host”,它只是主机,也就是连接http://blog.csdn.net/coding_or_coded中的blog.csdn.net,不要画蛇添足,写成blog.csdn.net/coding_or_coded,这样,我相信,部分手机还是可以通过的,除非你只适配这部分手机,不然,请不要这样写。
2.多线程:
当你拿着200元的纯触摸,高清摄像头,纯山寨手机,却要开发一个用户体验良好的项目的时候,你就知道,厂商,只他妈会骗人。当然,买这种手机的用户大部分也不下载应用程序(舍不得流量,或者不会上网)。但是你的应用却不得不适配这些机型。最简单的,我亲自做过测试的:部分mtk手机不能使用多线程联网(这里的意思是支持多线程,但是多个线程同时联网的话,必然有一个线程出现IOException)。所以,在当前J2ME还横行的年代,为了适配所有手机,正常的联网应用,在情况允许的条件下,程序中只应该出现三个线程:一个绘图线程(UI线程),一个联网线程,一个联网超时的监控线程。(当然,还有一些特殊的需求,可能不能放在这些线程中,但是记住,多开一个线程,就意味着你的程序就可能“丢失”一部分低端手机)。
3.编码:
可能大家都知道,中文字符必须要求UTF-8,GBK等编码,但是又有多少人知道,J2ME里面,可能有部分手机不支持GBK呢?所以,在J2ME程序中,或者网络请求中,所有涉及中文的数据,请使用UTF-8吧,不为别的,只因为所有手机都支持UTF-8。
……