后台任务序列化与IntentService
来源:互联网 发布:springmvc json转对象 编辑:程序博客网 时间:2024/06/18 16:35
应用场景:当用户注册成功后,填写用户信息界面,断网了,此时点击了修改信息,出于友好考虑,应该将提交的数据,序列化保存到本地,然后允许用户继续访问app。等到下次联网时,将修改的数据自动提交到服务器
1.将请求加入到后台任务
请求——封装为javabean——序列化文件
①封装为网络请求
public class NetTask implements Serializable {/** * */private static final long serialVersionUID = 1L;private String url;private int method;// 0:post 1: getprivate Map<String, String> headers = new HashMap<String, String>();private Map<String, String> parameters = new HashMap<String, String>();public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public int getMethod() {return method;}public void setMethod(int method) {this.method = method;}public Map<String, String> getHeaders() {return headers;}public void setHeaders(Map<String, String> headers) {this.headers = headers;}public Map<String, String> getParameters() {return parameters;}public void setParameters(Map<String, String> parameters) {this.parameters = parameters;}}<pre name="code" class="java">public class Account implements Parcelable {private String account;// 账号private String name;// 用户名private String icon;// 用户图像private int sex;// 性别 0:未设置 1:女 2:男 3:其他private String sign;// 用户个性签名private String area;// 用户所在区域private String token;// 用户与服务器交互的唯一标private boolean current;// 是否是当前用户public Account() {}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}public String getArea() {return area;}public void setArea(String area) {this.area = area;}public String getToken() {return token;}public void setToken(String token) {this.token = token;}public boolean isCurrent() {return current;}public void setCurrent(boolean current) {this.current = current;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}private Account(Parcel parcel) {Bundle val = parcel.readBundle();account = val.getString("account");name = val.getString("name");icon = val.getString("icon");sex = val.getInt("sex");sign = val.getString("sign");area = val.getString("area");token = val.getString("token");current = val.getBoolean("current");}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {Bundle val = new Bundle();val.putString("account", account);val.putString("name", name);val.putString("icon", icon);val.putInt("sex", sex);val.putString("sign", sign);val.putString("area", area);val.putString("token", token);val.putBoolean("current", current);dest.writeBundle(val);}public static final Parcelable.Creator<Account> CREATOR = new Creator<Account>() {@Overridepublic Account[] newArray(int size) {return new Account[size];}@Overridepublic Account createFromParcel(Parcel source) {return new Account(source);}};@Overridepublic String toString() {return "Account [account=" + account + ", name=" + name + ", icon="+ icon + ", sex=" + sex + ", sign=" + sign + ", area=" + area+ ", token=" + token + ", current=" + current + "]";}}
<pre name="code" class="java">String url = "http://192.168.1.101:8080/ChatServer/user/name";Map<String, String> headers = new HashMap<String, String>();headers.put("account", account.getAccount());headers.put("token", account.getToken());Map<String, String> parameters = new HashMap<String, String>();parameters.put("name", text);
NetTask request = new NetTask();request.setUrl(url);request.setMethod(0);request.setHeaders(headers);request.setParameters(parameters);②序列化
public class SerializableUtil {public static <T extends Serializable> void write(T t, String outPath)throws Exception {ObjectOutputStream oos = null;try {File file = new File(outPath);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}oos = new ObjectOutputStream(new FileOutputStream(file));oos.writeObject(t);} finally {if (oos != null) {oos.close();}}}public static Serializable read(String path) throws Exception {ObjectInputStream ois = null;try {ois = new ObjectInputStream(new FileInputStream(path));Object object = ois.readObject();if (object != null) {return (Serializable) object;}} finally {if (ois != null) {ois.close();}}return null;}}
String outPath = DirUtil.getTaskDir(getActivity()) + "/"+ System.currentTimeMillis();try {SerializableUtil.write(request, outPath);} catch (Exception e) {e.printStackTrace();}
2.页面跳转
。。。。跳转到自己的需求界面
3.当网络连接时,反序列化
①注册一个监听网络变化
public class ConnectedReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// 判断网络是否连接String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {if (CommonUtil.isNetConnected(context)) {// 网络已经连接context.startService(new Intent(context,BackgroundService.class));//开启后台服务,必须此服务要求运行到子线程中}}}}②后台service,IntentService 必须要实现无参构造函数,它运行在子线程中,如果IntentService 被start了多次,onHandleIntent()方法将排队执行多次
public class BackgroundService extends IntentService {// 1.构造函数应该注意的public BackgroundService() {super("background");//随便写一个参数// TODO Auto-generated constructor stub}@Overrideprotected void onHandleIntent(Intent intent) {// 2. 此方法执行在子线程中// 3. service start多次,此方法会排队执行<pre name="code" class="java"><span style="white-space:pre"></span>NetTask task = (NetTask) SerializableUtil.read(filePath);// TODO: 发送请求// 改变状态值//dao.updateState(id, 1);String url = task.getUrl();Map<String, String> headers = task.getHeaders();Map<String, String> paramaters = task.getParameters();boolean result = HMHttpManaer.getInstance().post(url, headers,paramaters);//具体操作根据需求
}}
0 0
- 后台任务序列化与IntentService
- Android的后台任务IntentService
- 使用IntentService执行后台任务
- Android 后台任务(六)IntentService
- Android中使用IntentService执行后台任务
- Android中使用IntentService执行后台任务
- android后台任务(二):IntentService
- Http与后台任务
- 使用后台服务 IntentService
- IntentService执行后台服务
- unix 进程与后台任务
- android异步任务之IntentService
- linux 任务管理-后台运行与终止
- Http与后台任务(AsyncTask)
- Android后台调度任务与省电
- 使用nohub与screen后台执行任务
- linux 任务管理-后台运行与终止
- android后台服务service全解析(中)--IntentService与Notification前台通知
- 组态软件与oracle数据库的连接简介
- 侧滑菜单
- CSS学习(九)——构造颜色、背景和图像
- A - Max Sum Plus Plus——POJ
- 自定义UICollectionViewLayout实现瀑布流
- 后台任务序列化与IntentService
- centos 6.x sftp配置
- 登录页面密码显示隐藏功能
- 将一个字符串逆序
- ijkplayer阅读学习笔记之从代码上看播放流程
- Android 抽屉效果的导航菜单实现
- Oracle-hugepages_settings.sh
- windows编译g2o图优化框架(vs2010)
- Jpanel下的键盘事件