精华内容
下载资源
问答
  • 1.DDMS简介 DDMS 的全称是Dalvik Debug Monitor Service,...它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。 ...

    1.DDMS简介

    DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。

    2.DDMS功能介绍

    1. Emulator Control:
      通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能比如:接听电话,根据选项模拟各种不同网络情况,模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等;
    2. Telephony Status:
      通过选项模拟语音质量以及信号连接模式.
    3. Telephony Actions:
      模拟电话接听和发送SMS到测试终端.
    4. Location Control:
      模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识,可以通过以下3种方式:
    5. Manual:
      手动为终端发送二维经纬坐标。
    6. GPX:
      通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值.
    7. KML:
      通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端

    3.File Explorer 窗口

    在File Explorer窗口中,可以查看Android虚拟机内的系统文件,以及将应用安装到虚拟机上所产生的配置和数据库文件。
    在这里插入图片描述
    mnt—shell—emulated—0 目录用于模拟用户SDcard的存储。在这里插入图片描述

    4.SDcard文件导入和导出

    在File Explorer中,将文件导入到mnt—shell—emulated—0目录里
    在这里插入图片描述

    展开全文
  • 最麻烦的是如何高效处理捕捉到的每帧数据,这也导致做出来的效果不好,5–6帧每秒,像在看ppt,所以这次把捕捉到的数据先转换为YuvImage对象,之后开启新线程执行YuvImage转jpg的方法得到jpg得字节数据后启动新线程去...

    最麻烦的是如何高效处理捕捉到的每帧数据,这也导致做出来的效果不好,5–6帧每秒,像在看ppt,所以这次把捕捉到的数据先转换为YuvImage对象,之后开启新线程执行YuvImage转jpg的方法得到jpg得字节数据后启动新线程去执行发送数据到客户端的工作,放开Yuvimage解码jpg的线程,可以不用等发送完成,在发送数据的同时继续解码。虽然还是会掉帧,但实践证明这样操作效果还是比较好的。或许是摄像头捕捉的帧率本来就不高(猜的)。

    在这里插入图片描述掉线时交替闪烁,收发数据时,闪烁越快,帧率越高,类似电脑后面网口上那颗小黄灯,一闪一闪的,晚上在村里放,你就是那个村里最靓的仔(坏笑)

    在这里插入图片描述

    MainActivity类做了写更改,比如自动获取机器的IP地址,用这个IP地址作为服务器,客户端接入就可以直接通信收发图像数据。增加了k1用来转码jpg,开新线程发送图像数据

     Camera camera;
        SurfaceView surfaceView;//预览
        SurfaceHolder surfaceHolder;
    public static boolean boo1;//是否可以发送数据
    boolean boo3;//连接中
        Socket soc;
        InputStream input;
        OutputStream out;
        TextView textView;//显示配置端口信息
    int port = 8081;
        ServerSocket ser;//服务器
    boolean is_ser_link_ser;//记录网路是否正常
        String ip = "";
    public Thread gh1;
    boolean led_flash;//未连接闪关灯交替闪烁
    
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sett1();//启动相机
            textView = findViewById(R.id.textView);
            ip = getIpAddress(MainActivity.this);
    if(ip != "" && !ip.equals("0.0.0.0")){
                textView.setText(ip+":"+port);
    }else{
                textView.setText("没有wifi网络,请打开wifi重启");
    }
            gh1 = new Thread(new Runnable() {
    public void run() {
    
    }
    });
            gh1.start();
    }
    
    //打开相机
    public void sett1(){
            camera = camera.open(0);
            camera.setDisplayOrientation(90);
            surfaceView = findViewById(R.id.surfaceView1);
            surfaceHolder = surfaceView.getHolder();
            surfaceHolder.addCallback(new SurfaceHolder.Callback() {
    public void surfaceCreated(SurfaceHolder holder) {
    try {
                        camera.setPreviewDisplay(surfaceHolder);
    } catch (IOException e) {
                        e.printStackTrace();
    }
                    camera.startPreview();
    }
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
    }
    public void surfaceDestroyed(SurfaceHolder holder) {
    
    }
    });
    //获取摄像实时数据
            camera.setPreviewCallback(new Camera.PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera camera) {
    //判断服务器是否打开
    if(is_ser_link_ser ){//判断服务器是否正常打开,否则开启新线程去打开服务器
                        Camera.Size size = camera.getParameters().getPreviewSize();
                        YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width, size.height, null);
    if(image != null ){//&& new Date().getTime()-tim>30
    yuvtojpeg(size, image);
    }
    }else {
    if(!boo3){
                            ip = getIpAddress(MainActivity.this);
    if(ip != "" && !ip.equals("0.0.0.0")){
                                textView.setText(ip+":"+port);
    new Thread(new Runnable() {
    public void run() {
                                        boo3 = true;
                                        is_ser_link_ser = soc_link_ser();
                                        boo3 = false;
    }
    }).start();
    }else{
                                textView.setText("没有wifi网络,请打开wifi重启");
    }
    }else{
    //断线时,未连接时,闪关灯交替闪烁
    if(led_flash){
                                led_flash = !led_flash;
                                Camera.Parameters parameters = camera.getParameters();
                                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                                camera.setParameters(parameters);
    }else{
                                led_flash = !led_flash;
                                Camera.Parameters parameters = camera.getParameters();
                                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                                camera.setParameters(parameters);
    }
                            Toast.makeText(MainActivity.this,"无设备",Toast.LENGTH_SHORT).show();
    }
    }
    }
    });
    }
    
    public void yuvtojpeg(Camera.Size size, YuvImage im){
    if(!gh1.isAlive() ){
                gh1 = new Thread(new k1(size,im,MainActivity.this,1));
                gh1.start();
    }
    }
    
    //套接字异常掉线,重新连接,获取数据流,重启服务器
    public boolean soc_link_ser(){
    if(create_ser(ip)){
    try {
                    soc = ser.accept();
                    input = soc.getInputStream();
                    out = soc.getOutputStream();
    return true;
    } catch (IOException e) {
    }
    }
    return false;
    }
    
    //创建服务器,返回是否创建成功,等待连接成功
    public boolean create_ser(String ip){
    try {
    if(ser!=null){
                    ser.close();
    }
                ser = new ServerSocket(port, 1, InetAddress.getByName(ip));
    return true;
    } catch (IOException e) {
    
    }
    return false;
    }
    
    //获取WiFi下的IP地此
    public static String getIpAddress(Context context) {
    // 获取WiFi服务
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    // 判断WiFi是否开启
    if (wifiManager.isWifiEnabled()) {
    // 已经开启了WiFi
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int ipAddress = wifiInfo.getIpAddress();
                String ip = intToIp(ipAddress);
    return ip;
    } else {
    // 未开启WiFi
    return "";
    }
    }
    
    //把int数据转换为string
    private static String intToIp(int ipAddress) {
    return (ipAddress & 0xFF) + "." +
    ((ipAddress >> 8) & 0xFF) + "." +
    ((ipAddress >> 16) & 0xFF) + "." +
    (ipAddress >> 24 & 0xFF);
    }
    
    //       //负责发送数据到电脑
    public void sett3(byte[] cm){
            boo1 = true;
            Camera.Parameters parameters = camera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(parameters);
    byte[] ddf = cm;
            String str = "\r" + ddf.length+"\r\n";
    try {
                out.write(str.getBytes());
                out.write(ddf);
                out.flush();
                input.read();
    } catch (IOException e) {
                is_ser_link_ser = false;//套接字异常,不能正常收发数据
    }
            boo1 = false;
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
    }
    
    @Override
    protected void onStop() {
    super.onStop();
    if(camera!=null){
                camera.stopPreview();
    }
    if(ser != null){
    try {
                    ser.close();
                    is_ser_link_ser = false;
                    boo1 = false;
                    boo3 = false;
    } catch (IOException e) {
    
    }
    }
    }
    
    protected void onStart() {
    super.onStart();
    if(camera!=null){
                camera.startPreview();
    }
            ip = getIpAddress(MainActivity.this);
    if(ip != ""){
                textView.setText(ip+":"+port);
    }else{
                textView.setText("没有wifi网络,请打开wifi重启");
    }
    }

    k1类代码

    public class k1 implements Runnable {
    
        Camera.Size size; YuvImage im;
        MainActivity ma;
    int f;
        ByteArrayOutputStream bn = new ByteArrayOutputStream();
    
    public k1(Camera.Size size, YuvImage im, MainActivity ma,int f) {
    this.size=size;
    this.im=im;
    this.ma=ma;
    this.f=f;
    }
    
    public void run() {
            im.compressToJpeg(new Rect(0,0,size.width,size.height),90,bn);
    //判断是否可以发送
    if(!ma.boo1){
    new Thread(new Runnable() {
    public void run() {
                        ma.sett3(bn.toByteArray());
                        bn.reset();
    }
    }).start();
    }
    }
    }

    客户端,查看端电脑,稍作改动,MainFrame类不变,改动后的Jframe1类

    Jframe1 frame;//窗体对象
     Atpa ap;//绘图,显示对象
     Socket soc;
     InputStream input;
     OutputStream outp;
     String str;
     String zlv = "100";//帧率
     long timm=0;//如果长达30秒未更新时间表是卡住了,重启服务器
     Thread mth;//长时间读取不到数据线程
     boolean boo = true;//线程关闭
     boolean soc_boo;//连接中断标志
     boolean soc_link;//连接中
     Image img;
     
     public Jframe1(String str) {//传入ip端口
      frame = this;
      this.str=str;
      setTitle("设备"+str);
      setSize(500, 300);
      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      getContentPane().add(ap = new Atpa());
      timm = new Date().getTime();
      mth = new Thread(new Runnable() {//创建服务器
       public void run() {
        zlv = "初始化"+str+"";
        while(boo) {
         if(new Date().getTime()-timm>5*1000 || !soc_boo) {
          timm = new Date().getTime();
          try {
           if(input != null) {
            input.close();
           }
           if(outp != null) {
            outp.close();
           }
           if(soc != null) {
            soc.close();
           }
          } catch (IOException e) {
           e.printStackTrace();
          }
          if(!soc_link) {
           new Thread(new Runnable() {
            public void run() {
             soc_link = true;
             sett1();
             soc_link = false;
            }
           }).start();
          }
         }
         try {
          Thread.sleep(50);
         } catch (InterruptedException e) {
          
         }
        }
       }
      });
      mth.start();
      
      addWindowListener(new WindowListener() {
       public void windowOpened(WindowEvent e) {
        // TODO 自动生成的方法存根
        
       }
       
       @Override
       public void windowIconified(WindowEvent e) {
        // TODO 自动生成的方法存根
        
       }
       
       @Override
       public void windowDeiconified(WindowEvent e) {
        // TODO 自动生成的方法存根
        
       }
       
       @Override
       public void windowDeactivated(WindowEvent e) {
        // TODO 自动生成的方法存根
        
       }
       
       @Override
       public void windowClosing(WindowEvent e) {
       }
       
       @Override
       public void windowClosed(WindowEvent e) {
        try {
         MainFrame.port = MainFrame.port.replace(str, "0");
         if(input != null) {
          input.close();
         }
         if(outp != null) {
          outp.close();
         }
         if(soc != null) {
          soc.close();
         }
         if(mth != null) {
          mth.interrupt();
         }
         boo = false;
         System.out.println("退出");
        } catch (IOException e1) {
    //     e1.printStackTrace();
        }
       }
       
       @Override
       public void windowActivated(WindowEvent e) {
        // TODO 自动生成的方法存根
        
       }
      });
     }
     
     //尝试创建服务器,新线程执行
     public void sett1() {
      String[] ipo = str.split(":");//分离ip端口
      getIO(ipo[0], Integer.parseInt(ipo[1]));
     }
     
     //等待客户端连接获取io流
     public void getIO(String ip, int port) {
      timm = new Date().getTime();
      try {
       System.out.println(zlv="正在连接");
       repaint();
       soc = new Socket(InetAddress.getByName(ip), port);
       System.out.println("连接成功");
       input = soc.getInputStream();
       outp = soc.getOutputStream();
       soc_boo = true;
       while(soc_boo && boo) {
        getdat(input, outp);
       }
      } catch (IOException e) {
       soc_boo = false;
       System.out.println(zlv="连接"+ip+"服务器失败");
      }
     }
     
     //分析请求数据
     public void getdat(InputStream in1, OutputStream out1) {
      timm=new Date().getTime();
      try {
       long tim2 = new Date().getTime();
       //先读取数据长度
       byte[] b = new byte[64];//接收64字节数据,读取图片文件长度
       int ys = 0 ;
       int a = 0;
    //   while(ys < b.length) {
        a = in1.read(b, ys, b.length-ys);//必须读满数据
        ys += a;
    //   }
    //   System.out.println("本次数据读取"+a);
       if(a==-1) {
        soc_boo = false;
        System.out.println(zlv="连接中断");
       }
       String str = new String(b);
       //查找文件大小
       int as = str.indexOf("\r");
       int asb = str.indexOf("\r\n");
       if(as != -1 && asb != -1 ) {//确认找到指定文件
        try {
         String stb = "";
         stb = str.substring(as+1, asb);
         int leng = Integer.parseInt(stb);//缓存大小
         int asc = asb+2;//数据量占用大小
         long tim1 = new Date().getTime();
         readimg(a, asc, leng, b, in1, out1);//读取图片
         System.out.println("传输用时:"+ (new Date().getTime()-tim1));
         System.out.println("总用时:"+ (new Date().getTime()-tim2)+"\t帧率:"+(zlv=(1000/((new Date().getTime()+1)-tim2)+"")));
         zlv=(1000/(new Date().getTime()-tim2))+"";
        } catch (Exception e) {
         soc_boo = false;
         System.out.println(zlv="连接中断");
        }
       }
      } catch (IOException e) {
       soc_boo = false;
       System.out.println(zlv="连接中断");
      }
     }
      
     //读取图片数据,绘制图片
     public void readimg(int aleng, int off, int leng, byte[] b, InputStream in, OutputStream ou) {
      try {
       //缓存图片数据
       byte[] bm = new byte[leng];
       int se = 0;
       int cv = 0 ;
       //把数据量剩余数据提取出
       if(aleng==64) {
        for(int i = off ; i<b.length; i++) {
         bm[se] = b[i];
         se++;
        }
       }
       int a = in.read(bm, se, bm.length-se);
       cv = se;
       while(cv<leng  && a!=-1) {
        cv += a;
        a = in.read(bm, cv, bm.length-cv);
       }
       img = new ImageIcon(bm).getImage();
       ap.getImg(img);//绘制图片
       ou.write(1);//写入回传数据
    //   System.out.println("写入回传数据完成");
      } catch (IOException e) {
       soc_boo = false;
       System.out.println(zlv="连接中断");
      }
     }
     
     class Atpa extends JPanel{
      Image img = null;
      
      //投屏内容显示面板
      public Atpa() {
       setSize(frame.getContentPane().getWidth(), frame.getContentPane().getHeight());
       setBackground(new Color(176, 224, 230));
      }
      
      //获取图片
      public void getImg(Image img) {
       this.img = img;
       repaint();//刷新界面
      }
      
      public void paint(Graphics g) {
       super.paint(g);
       g.drawImage(img, 0, 0, getWidth(),getHeight(), ap);
       g.setFont(new Font("仿宋", Font.BOLD,25));
       g.setColor(Color.YELLOW);
       g.drawString(zlv, 30, 30);
      }
     }
    展开全文
  • 安卓模拟器脚本录制

    2021-01-13 21:36:10
    线程中添加录制控制器 在http代理服务器中指定录制脚本的路径,默认端口8888 查看本地的ip 设置移动端代理,IP和端口号 启动 点击OK 打开模拟器,抓取接口 点击”停止”按钮,结束录制 ...

    添加http代理服务器
    在这里插入图片描述
    在线程中添加录制控制器
    在这里插入图片描述
    在http代理服务器中指定录制脚本的路径,默认端口8888

    在这里插入图片描述
    查看本地的ip
    在这里插入图片描述
    设置移动端代理,IP和端口号
    在这里插入图片描述
    启动
    在这里插入图片描述

    点击OK
    在这里插入图片描述

    打开模拟器,抓取接口
    在这里插入图片描述

    点击”停止”按钮,结束录制
    在这里插入图片描述

    展开全文
  • 使用DDMS抓取安卓APP的奔溃日志 一、什么是DDMS DDMS 的全称是Dalvik Debug Monitor ...它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电...

                                   使用DDMS抓取安卓APP的奔溃日志

     

    一、什么是DDMS

     

    DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。

    它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。

    集成开发环境中,有DDMS控制台窗口。如,MyEclipse中,有个叫DDMS的Console。

     

    二、使用背景

     

    在测试过程中出现Crash等异常情况,或者需要抓取日志的情况下,可以将设备连接到DDMS,查看日志分析。

     

    三、实际场景运用


    下面举例:测试过程中出现Crash,采用DDMS抓取日志,分析。具体的bug描述如下:

     

      bug标题:【Addon测试工具】环境配置页面,再次点击右上角的环境配置,导致APP 奔溃,详见截图和DDMSlog

              【测试环境】
           Win7 64 Google Chrome  41.0.2272.101m
    101pad romv1.5.33.35sdk4.4.2,浏览器:绿色上网1.0.6.5Addon测试工具1.0
          
    【问题描述】
          
    Addon测试工具】环境配置后,再次点击右上角的环境配置,导致APP 奔溃,详见截图和log
          
    【操作步骤】
           1.
    登录APP,环境配置,再次点击环境配置按钮

              

          2.查看状态

            

         3.连接设备到DDMS分析奔溃原因,截图如下:

              
           【实际结果】
           APP Crash
          
    【预期结果/解决方法】
          
    不崩溃
          
    【可重现次数】
           10/10
          
    【备注】


    四、分析DDMS日志


          问题原因:添加fragment, 没有做已经添加的判断
         
    解决要点:在添加fragment是先进行是否已经添加的判断

     

    五、小结


    根据需要,抓取DDMS日志,可以帮助开发人员定位bug问题,提高测试与开发的效率。


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://www.cnblogs.com/haixianglan/p/4609240.html

    展开全文
  • 黑马安卓52期视频教程

    热门讨论 2015-06-24 22:15:48
    01、安卓基础+JNI(14天)-------------------------- day01_Android应用开发-快速入门 01_网络制式的概念 02_android简单历史 03_Android体系结构 04_JVM和DVM的区别 05_下载SDK 06_SDK目录结构 07_模拟器的创建 ...
  • 一个包含下载功能的app,包含一个服务。在初始化的时候创建所有需要的线程,同时包括一个数据库读写线程,它会把进行中的下载任务信息每隔一段时间就写入到数据库的行中去。 在业务流程中会删除任务,点击删除会...
  • |--安卓下的多线程断点上传 |--对话框与进度条结合用法 |--屏幕之Activity全屏 |--屏幕之横竖屏切换 |--屏幕之调节屏幕亮度 |--屏幕相关之Display类获取屏幕尺寸和分辨率 |--屏幕适配之ScrollView |--屏幕适配之像素...
  • 我在做安卓surfaceview的时候,要加载显示3条折线,但只有一条折线的时候,正常拖动都没问题,一旦显示3条折线,拖动就不能显示预期的折线,拖动后显示的是一片空白,除了最右边一点折线 自定义类 ``` public ...
  • 安卓手机脚本录制 前提 : 电脑与手机连接同一个wifi 添加http代理服务器 添加线程组,在线程组中添加录制控制器 在http代理服务器中指定录制脚本的路径,默认端口为8888 在cmd中ipconfig查看本机的wifi...
  • 概观 ...所有请求都是在应用程序的主UI线程之外发出的,但任何回调逻辑都将在使用Android的Handler消息传递创建回调的同一线程上执行...如果您还在寻找一个很棒的安卓崩溃报告服务,我还建议您查看我的公司Bugsnag。 ...
  • Linux日常使用命令

    2020-03-26 21:13:02
    文件和目录查看/终止进程磁盘占用空间磁盘满了,部分大文件已删除,查看占用率还是100%查看日志排查问题编辑文本上传/下载文件压缩/解压文件 Linux , 核心思想,一切皆文件。 Linux是一套免费使用和自由传播的开源...
  • 安卓 XBox One FreeBSD 支持的GPU分析APIS: D3D 11 的OpenGL 卡达 金属 特征: CPU上运行的多个线程的轻量级工具。 可在Chrome,Firefox和Safari中运行的Web查看器。 自定义WebSockets服务器通过潜在线程将...
  • 性能优化(七)

    2018-03-29 23:08:58
    2,ddms 和 traceView答:DDMS:DDMS 【Dalvik Debug Monitor Service】是安卓(android)开发环境中的Dalvik虚拟机调试监控服务。DDMS能够提供:测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat...
  • 可以进行的操作有:为测试设备截屏,查看特定行程中正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等,功能非常强大,对于安卓开发者来说是一个非常好的工具,下面来看看其...
  • 2,用户操作安卓客户端的时候,客户端QQClient创建一个Socket后去连接服务器,创建一个输出线程ClientOutputThread,将客户端的消息发送给服务器; 3,服务器使用InputThread接收用户发送的消息,根据消息的不同调用不同的...
  • 《Android高级编程》

    2011-12-22 23:37:13
    7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 使用后台工作线程 8.2.1 创建新的线程 8.2.2...
  • 支持将下载的地图转换为OruxMaps离线地图包,供户外安卓地图软件OruxMaps离线调用,支持导出无偏移卫星地图,同自有Kml数据完美叠加 8.MBTiles格式离线地图包转换。支持将下载的地图转换为MBTiles格式离线地图包 9....
  • 支持将下载的地图转换为OruxMaps离线地图包,供户外安卓地图软件OruxMaps离线调用,支持导出无偏移卫星地图,同自有Kml数据完美叠加 8.MBTiles格式离线地图包转换。支持将下载的地图转换为MBTiles格式离线地图包 9....
  • Booster 提供了性能检测、多线程优化、资源索引内联、资源去冗余、资源压缩、系统 Bug 修复等一系列功能模块,可以使得稳定性能够提升 15% ~ 25%,包体积可以减小 1MB ~ 10MB。同时DoKit插件的底层也是基于Booster...
  • Booster 提供了性能检测、多线程优化、资源索引内联、资源去冗余、资源压缩、系统 Bug 修复等一系列功能模块,可以使得稳定性能够提升 15% ~ 25%,包体积可以减小 1MB ~ 10MB。同时DoKit插件的底层也是基于Booster...
  • 支持直接源码集成到example的方式,方便编译到安卓,for web套件等。 支持编译成wasm文件,直接网页运行,可以在谷歌、火狐、edge等浏览器运行,原生性能。 每个控件的源代码都有详细中文注释,都按照统一设计规范...
  • 支撑上层业务组件运行的基础业务服务。 该案例中:在基础组件库中主要有,网络请求,图片加载,通信机制,工具类,分享功能,支付功能等等。当然,我把一些公共第三方库放到了这个基础组件中! 4.3 项目组件化...
  • [精仿]QQ2013局域网通讯(10.30更新版-带最新版界面库)

    千次下载 热门讨论 2013-11-02 16:18:45
    特权:购买商业版的用户,有权利享有最快的更新服务,第一时间将最新版本的dll源码送到你手上。 使本项目源码或本项目生成的DLL前请仔细阅读以下协议内容,如果你同意以下协议才能使用本项目所有的功能,否则如果你...
  • 安卓3.9客户端启动页面配置 客户端公众服务号管理 公众服务消息推送列表查询。 业务收获 熟悉并掌握了支付平台的支付流程、基础模块以及客户端模块的业务 技术收获 对JS、JSP、SQL、Linux技术的进一步巩固. ...
  • ElasticSearch 安装bigdesk 查看集群环境 Elasticsearch 5.2.x 使用 Head 插件连接不上集群 1_ElasticSearch使用term filter来搜索数据 2_ElasticSearch filter执行原理 bitset机制与caching机制 3_...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    创建了一个线程负责输出信息到文件 注册了广播接收器ACTION_BATTERY_CHANGED BatteryDog 继承了Activity 布局battery_dog 文件 主要负责启动/关闭服务Service 和分析数据然后相关控件显示出来 BatteryGraph 继承了...
  • chrome.exe

    2020-04-01 09:26:11
    另有手机版的Chrome浏览器,于2012年发布了Chrome浏览器移动版,提供IOS系统、安卓系统以及Windows Phone系统的Chrome浏览器,在保持浏览器原有特点的情况下,实现了多终端使用浏览器,具有共享收藏历史信息等功能,...
  • UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:1. 测试...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

安卓服务线程查看