首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

【】安卓客户端与服务器交互方式的选择

2013-08-01 
【在线等】安卓客户端与服务器交互方式的选择需求:实现客户端不断与服务器交互获得实时数据实现:我在后台Ser

【在线等】安卓客户端与服务器交互方式的选择
需求:实现客户端不断与服务器交互获得实时数据

实现:我在后台Service中采用TimerTask类每隔一段时间就去服务器请求数据,请求那块用HttpClient,但发现这样不但应用的响应速度慢,而且应用运行一段时间后就会出现ConnectError的错误,出现错误之后,应用就不再向服务器请求数据。

思考:百度查到还可以用Socket和WebService
但是Socket涉及到服务器数据库的安全问题
WebService只写过客户端没写过服务器

哪种方式比较好,求大神赐教 服务器 Android 交互?
[解决办法]
另外你的思路好像有点问题。我做过这样的功能,应该是在主界面中启动一个TimerTask定时器发送一个广播(该定时器在应用程序的一个生命周期内只启动一次),然后广播接收器去开启service,然后网络操作写在服务的onStart方法里面。
activity中代码


//flag用来控制该定时器只启动一次
if (flag) {
Intent intent = new Intent(Main.this, AlamrReceiver.class);//AlamrReceiver是个广播接收器
PendingIntent pi = PendingIntent.getBroadcast(Main.this, 0, intent,0);
AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),(5 * 60 * 1000), pi);
flag = false;
}

广播接收器中代码

public class AlamrReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, service.class);//service是服务
context.startService(intent);
}
}

服务中代码

@Override
public void onStart(Intent intent, int startId) {
Thread t = new Thread(new updateRunnable(intent));//启动线程做网络操作
t.start();
onDestroy();
super.onStart(intent, startId);
}

注意要在AndroidManifest.xml注册服务和广播
[解决办法]
socket有一个开源项目,是用于实时推送的  叫androidpn可以百度看一下,这个能不能满足你的需求,是用一个叫xmpp的协议。

另外,你service做那个事情叫轮询,这个是比较浪费资源的,如果你间隔时间很短,那实时性可以高一点,但是很浪费手机资源,如果间隔时间长了,那实时性就不行了。

自己看着选择吧,最好不要自己用socket去封装,异常很多,处理起来比较费事儿

热点排行