五、项目结构

常用包名定义及含义

  • com.company.test.system(application service等)
  • com.company.test.thread(thread基类等)
  • com.company.test.tk(ip地址的获取类)
  • com.company.test.util(定义一些接口 结构等)
  • com.company.test.pack(socket通讯包类)
  • com.decoder.util(H264解码库 必须和jni中定义的包名一致)
image

MyActivity的父类封装

  • 所有的Activity都继承于它
  • 定义公共的成员变量和函数
  • 可做退出和打开的特殊定制效果
package com.company.test.ui;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;

import com.company.test.R;

public class MyActivity extends AppCompatActivity {

    public static Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        mContext = this;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK){
            animFinish();
        }

        return super.onKeyDown(keyCode, event);
    }

    private void animFinish(){
        finish();
    }

    //activity进入  从右边进入
    public void overridePendingTansitionEnter(){
        this.overridePendingTransition(R.anim.in_form_right,R.anim.out_right_to_left);
    }

    //activity退出
    public void overridePendingTansitionExit(){
        this.overridePendingTransition(R.anim.in_form_right,R.anim.out_right_to_left);
    }
}

SafeThread父类封装

  • 所有thread类的父类
  • 定义开启和关闭机制 优化代码
package com.company.test.thread;

import android.util.Log;

/**
 * 所有线程内的基类
 */
public class SafeThread extends Thread {

    private static final String TAG = "SafeThread";

    //可以作为线程运行标示 避免重复启动
    protected boolean isRunFlg = false;

    public void setRunFlg(boolean flag) {
        isRunFlg = flag;
    }

    public void safeStart(){
        if (isRunFlg)
            return;
        setRunFlg(true);
        start();
    }

    public void safeStop(){
        if (!isRunFlg) return;
        setRunFlg(false);
        tryJoin();
    }

    public void tryJoin(){
        try {
            interrupt();
            join();
        }catch (InterruptedException e){
            Log.i(TAG, "tryJoin: ---" + e.getMessage());
        }
    }
}

通讯过程

  • 手机设备端登陆login
  • 手机设备端验证verify
  • 设备端视频请求(请求成功后返回videoId)
  • 设备端另开一个socket2
  • socket2发送视频请求(带上前面接收到的videoId)
  • 服务器接收到视频请求指令后开始发送视频
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,822评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,004评论 18 399
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,282评论 3 119
  • 这段时间随着《我的前半生》的热播,剧中各色各类人物的性格、命运都掀起了观者的热议,而让人印象深刻的是-----罗子...
    又见依依阅读 991评论 0 3
  • 同样站在木棉树下。此时,彼时。记得上次站在这个地方,被花砸到眼镜一次。从此,对木棉花有了关注。之后心血来潮,...
    Jewel随心所记阅读 224评论 0 0

友情链接更多精彩内容