最近公司接入了心率设备,把心率传入到服务器,很轻松地完成了这个工作,但是由于没有压力测试的专业人员,测试的任务就落到了我的身上,没办法谁让Android开发人员是个全才呢!!

先说说新的测试要求吧,要同时有不同的多个用户一起访问网络把心率传入到服务器端,那么Android怎么利用多线程来并发的访问网络呢?这个时候我们应该想到多线程的两种方法,继承Thread和实现Runnable接口。这里我用的后一种方法。网络框架用的是我上一篇博客封装的okhttp,不了解的可以看一下简单封装okhttppost方法。

废话不多说,先看看Custmoer.java。在这个类中主要是我们要做的操作。

package com.example.okhttpdemo;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

 

import com.example.okhttpdemo.NetWorkUitls.CallBack;

import com.squareup.okhttp.Request;

 

 

public class Custmoer implements Runnable{

/**

 * 用户 的id

 */

private int userid=1106;

/**

 * 心率数据 这里用随机数来代替

 */

private int heartrate=0;

/**

 * 构造方法

 * @param userid

 * @param heartrate

 */

public Custmoer(int userid, int heartrate) {

this.userid = userid;

this.heartrate = heartrate;

}

 

@Override

public void run() {

sendGet();

}

/**

 * 发送网络请求 以下是网络请求部分 根据公司的要求自己修改

 */

private void sendGet() {

//格式化日期

Date nowDate = new Date();

SimpleDateFormat time1 = new SimpleDateFormat("yyyyMMddHHmmss");

String date = time1.format(nowDate);

long time=System.currentTimeMillis()/1000;

String string=userid+""+heartrate+date+time;

System.out.println("userid"+userid);

System.out.println("SignStr="+string);

//TransformDataUtils加密方法

String sign=TransformDataUtils.md5Encoding(string);

//存放参数的集合

Map map=new HashMap();

map.put("userid", userid+"");

map.put("date", date);

map.put("time", time+"");

map.put("heartrate", heartrate+"");

map.put("sign", sign);

NetWorkUitls.requestNet(url, map, new CallBack() {

/**

 * 请求成功

 */

@Override

public void onSuccess(String message) {

System.out.println("请求成功"+message);

}

/**

 * 请求失败

 */

@Override

public void onError(Request request, Exception e) {

// TODO Auto-generated method stub

}

});

}

 

}

下面我们看一下我的MainActivity,其实这个由一个Java程序移植过来的

package com.example.okhttpdemo;

 

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import java.util.Random;

import java.util.Set;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

import com.example.okhttpdemo.NetWorkUitls.CallBack;

import com.squareup.okhttp.Call;

import com.squareup.okhttp.Callback;

import com.squareup.okhttp.FormEncodingBuilder;

import com.squareup.okhttp.OkHttpClient;

import com.squareup.okhttp.Request;

import com.squareup.okhttp.Response;

 

import android.os.Bundle;

import android.os.Handler;

import android.app.Activity;

import android.util.Base64;

import android.view.Menu;

import android.widget.TextView;

 

public class MainActivity extends Activity {

 

Map map=new HashMap();

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//利用handler来发送消息每隔5秒发送一次网络请求

handler.postDelayed(runnable, 5000);

}

/**

 * 初始化线程池 并且说明线程池里边的线程数量

 */

ExecutorService service = Executors.newFixedThreadPool(60);

private Handler handler=new Handler();

  Runnable runnable=new Runnable() {

        @Override

        public void run() {

    int userid=1106;

   

     for (int i = 0; i < 60; i++) {

    userid++;

    //利用随机数来模拟心跳在50-200之间

     int max=200;

         int min=50;

         Random random = new Random();

        int heartrate = random.nextInt(max)%(max-min+1) + min;

    Custmoer custmoer = new Custmoer(userid, heartrate);

       service.execute(custmoer);//并发60个用户

   

    }

   

     System.gc();

 

 

   

         handler.postDelayed(this, 5000);

        }

    };

 

}

 

就这样很简单的完成了一个多线程并发请求网络。里边的程序可以根据你自己的 需求改动。

更多相关文章

  1. Android---网络交互之登录嘀咕网
  2. win10下使用Fiddler进行网络抓包
  3. DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大
  4. Android基于TCP和URL协议的网络编程示例【附demo源码下载】
  5. Android之Http网络编程(二)
  6. Android弹幕实现:基于B站弹幕开源系统(6)带用户头像且头像从网络加
  7. Android(安卓)RxJava实际应用案例讲解:使用RxJava的最佳开发场景
  8. Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连
  9. 笔记本wifi做热点 android通过热点上网

随机推荐

  1. adb通过wifi连接 milestone
  2. 我的第一个Android程序,BMI计算器,分享一下
  3. android:The application has stopped une
  4. Android之FastJSon基本使用,属性首字母大
  5. [转]android adapter 深刻分析
  6. Android(安卓)开发错误集锦
  7. 使用Canvas的drawTextOnPath方法实现沿着
  8. Android(安卓)Studio第一次安装遇见的问
  9. Android(安卓)SurfaceFlinger 学习之路(
  10. android 获取进程、服务、任务列表