Android学习日记二

3.23 星期二

Android对话框处理

// 提示对话框 构建器 alertdialog
// 自定义对话框 重点
// PopupWindow 弹窗 基础配置 动画
// ArrayAdapter 数组适配器 对话框

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:id="@+id/normal_dialog_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示一个普通对话框"
        android:onClick="myClick"/>

    <Button
        android:id="@+id/diy_dialog_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示一个自定义对话框"
        android:onClick="myClick"  />

    <Button
        android:id="@+id/popup_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示弹窗"
        android:layout_gravity="center_horizontal"
        android:onClick="myClick"  />
    <Button
        android:id="@+id/arrayAdapter_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示数组对话框"
        android:layout_gravity="center_horizontal"
        android:onClick="myClick"  />

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:background="@mipmap/dialog_bg">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="真的要退出吗?"
        android:textSize="34sp"
        android:textColor="#e61414"
        android:textStyle="bold"
        android:layout_marginTop="265dp"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margin="25dp">
        <Button
            android:id="@+id/yes_btn"
            android:layout_width="120dp"
            android:layout_height="50dp"
            android:background="@mipmap/yes_btn"/>
        <Button
            android:id="@+id/no_btn"
            android:layout_width="120dp"
            android:layout_height="50dp"
            android:background="@mipmap/no_btn"
            android:layout_marginLeft="20dp"/>
    </LinearLayout>
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp"
    android:gravity="center_vertical">

    <ImageView
        android:id="@+id/item_icon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:src="@mipmap/star"/>

    <TextView
        android:id="@+id/item_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试"
        android:layout_marginLeft="15dp"/>
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="#00ffff"
    android:padding="2dp"
    >

    <TextView
        android:id="@+id/choose"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="选择"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>

    <View
        android:layout_width="2dp"
        android:layout_height="30dp"
        android:background="#00ffff" />

    <TextView
        android:id="@+id/choose_all"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="全选"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>

    <View
        android:layout_width="2dp"
        android:layout_height="30dp"
        android:background="#00ffff" />

    <TextView
        android:id="@+id/copy"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:text="复制"
        android:textColor="#ffffff"
        android:gravity="center"
        android:background="#000000"/>


</LinearLayout>

package com.example.dialogdemo;

import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.PopupWindow;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void showNormalDialog(){
        AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.setTitle("提示");
        dialog.setMessage("您确定退出程序吗?");
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        dialog.show();
    }

    public void myClick(View view) {
        switch (view.getId()){
            case R.id.normal_dialog_btn:
                //AlertDialog的构造方法时protected
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("提示");
                builder.setMessage("您确定退出程序吗?");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish();
                    }
                });
                builder.setNegativeButton("取消",null);
                builder.show();
//                AlertDialog dialog = builder.create();
//                dialog.show();
                break;
            case R.id.diy_dialog_btn:
                MyDialog md = new MyDialog(this,R.style.mydialog);
                md.show();
                break;
            case R.id.popup_btn:
                showPopupWindow(view);
                break;
            case R.id.arrayAdapter_btn:
                showArrayDialog();
                break;
        }
    }
    private void showArrayDialog() {
        final String[] items = {"Java","Mysql","Android","HTML","C","JavaScript"};
        //数组适配器
        //参数1:环境
        //参数2:布局资源索引,指的是每一项数据所呈现的样式android.R.layout.xxx
        //参数3:数据源
//        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);
        ArrayAdapter adapter = new ArrayAdapter(this,R.layout.array_item_layout,R.id.item_txt,items);
        AlertDialog.Builder builer = new AlertDialog.Builder(this)
                .setTitle("请选择")
                //参数1:适配器对象(对数据显示样式的规则制定器)
                //参数2:监听器
                .setAdapter(adapter, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this,items[i],Toast.LENGTH_SHORT).show();
                        dialogInterface.dismiss();
                    }
                });
        builer.show();
    }

    //设置PopupWindow
    public void showPopupWindow(View view) {
        //准备弹窗所需要的视图对象
        View v = LayoutInflater.from(this).inflate(R.layout.popup_layout,null);
        //1.实例化对象
        //参数1:用在弹窗中的View
        //参数2、3:弹窗的宽高
        //参数4(focusable):能否获取焦点
        final PopupWindow window = new PopupWindow(v,190,35,true);

        //2.设置(背景、动画)
        //设置背景
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //设置能响应外部的点击事件
        window.setOutsideTouchable(true);
        //设置能响应点击事件
        window.setTouchable(true);
        //①创建动画资源   ②创建一个style应用动画资源    ③对当前弹窗的动画风格设置为第二部的资源索引
        window.setAnimationStyle(R.style.translate_anim);

        //3.显示
        //参数1(anchor):锚
        //参数2、3:相对于锚在x、y方向上的偏移量
        window.showAsDropDown(view,-190,0);

        //为弹窗中的文本添加点击事件
        v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"您点击了选择",Toast.LENGTH_SHORT).show();
                window.dismiss();   //控制弹窗消失
            }
        });

        v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"您点击了全选",Toast.LENGTH_SHORT).show();
                window.dismiss();
            }
        });

        v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"您点击了复制",Toast.LENGTH_SHORT).show();
                window.dismiss();
            }
        });
    }
}

package com.example.dialogdemo;

import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;

public class MyDialog extends Dialog {

    public MyDialog(@NonNull final Context context, int themeResId) {
        super(context, themeResId);
        //为对话框设置布局
        setContentView(R.layout.dialog_layout);

        findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.exit(0);
            }
        });

        findViewById(R.id.no_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });
    }
}

anim

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:fromYDelta="300"
        android:toYDelta="0"
        android:duration="2000"
        ></translate>
</set>

styles
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="mydialog" parent="android:style/Theme.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>
    <style name="translate_anim">
        <item name="android:windowEnterAnimation">@anim/translate</item>
    </style>
</resources>

3.24 星期三

activity生命周期

//
// activity第一条生命周期 logt创建TAG oncreat onstart onresume onpause onstop ondestory onrestart
// 其他分支 返回键触发 销毁的时候保存数据
// 重构 提取 变成变量
// activity之间的数据传递 防御式编程 直接putextra 2.创建bundle 3 序列化 B传给A setresult
// 处理数据和状态
https://github.com/yuxiaoss/Android-

Fragment 创建和使用

// 概述 有什么用 解决分辨率适配问题 平板 手机 生命周期
// 静态加载的应用 用v4 提取出单独的类 重构 refactor 在xml中 布局中使用
// 动态加载 在代码中加载
// activity向fragment传值 Bundle 提取常量 复用
// 回调 fragment向activity传值 callback
https://github.com/yuxiaoss/Fragment-

3.25 星期四

Viewpager 实现导航效果

// Viewpager 引导界面、相册多图片预览 多tab页面、APP导航 广告播放
// support包 依赖包 支持特性 arr
// 适配器把视图和数据联系起来 重构 提取方法 变量 常量
// 实现最简单的viewpager
// 使用viewpager实现APP导航页
// fragment配合viewpaper
// 实现底部导航布局 图标 选择器 选择变颜色 变图标
// 实现导航事件联动 fragmentpageadapter 常见tab切换效果
// support包

https://github.com/yuxiaoss/ViewPager

3.26 星期五

幕掏实战

// 幕掏旅游 com.tao.imtao adapter entity util 样式修改标题
// 闪屏页
// 主界面 mainactivity功能菜单 选择器Selector主要用来改变一些控件的默认背景
// 主界面 功能内容 fragment
// 我的实现 头部 fragment
// 我的实现 滚动列表
https://github.com/yuxiaoss/mutao1

3.29 星期一

Android网络操作

网络基础知识

// 网络基础知识 http协议应用层 TCP三次握手 客户端 服务端 URL解析
// 网络请求 请求方式 get获取数据在 url后面 不对服务器不做更改 post提交数据 从服务器获取数据
// get请求 原生实现 另一个线程子线程 使用 在manifests声明网络
// 主线程UI线程用来对控件的控制 更新控件只能在UI线程 因为在死循环等待控件使用
// 对http API29 res 添加xml文件 在manifests 添加申明 app文件目标版本号29api
// post请求 配置缓存取消 参数处理 data数据 encode 输出流数据
// 解析数据 json数据的解析 java.net
https://github.com/yuxiaoss/Android-intent-get-post

handler通信

// 主线程 UI线程activitythread 线程不安全 性能 线程安全 加锁 消息循环机制死循环
// 应用场景 定时任务 线程之间使用
// handler方法使用 主线程改变视图 子线程大量耗时的操作 sendmessage post mainactivity
// 异步下载文件并更新进度条 downloadactivity
// 倒计时的实现 优化handler内存泄漏 os.handler comtime mainactivity
// 强引用 主动释放 弱引用 为null 就被垃圾回收器回收了 静态 activity用完了,就垃圾回收
// 打地鼠案例 handler运行原理 主线程 handler looper message messagequeue
https://github.com/yuxiaoss/handler

AsyncTask异步任务

// AsyncTask 异步任务 吃饭 看电视同时进行 handler封装
// 多个线程 ANR 耗时操作的时候 UI Theard Worker Thread 线程不安全 多线程使用更改数据 安全 加锁后不会更改数据 主线程更新
// asynctask重用方法详解 泛型参数 可变参数
// 异步下载实现demo 申请权限
// ctrl + shift +上 顺序执行 异步执行完,执行下一个 内存泄漏 线程池
https://github.com/yuxiaoss/AsyncTaskProject

3.30 星期二

高级控件

ListView展示列表数据

// 01 ListView展示列表数据
// 应用场景 列表通讯录 短信 聊天界面 本质还是控件 view
// adapter 适配器 用来适配数据和控件
// listview 实现步骤
// adapter 数据绑定 创建item布局变成view 数据放在view里
// listview简单应用
// 获取系统已安装应用列表 列表优化 将layout优化view 只加载一次 viewHolder 优化列表样式 加载性能优化
https://github.com/yuxiaoss/-ListViewDisplay-list-data

ListView实现隔行效果

网络下载数据并显示 使用异步访问网络 URL AsyncTask
解析获取json对象 json转对象 GSON fastjson开源库 request
加载数据到listview RequestDataAdapter BaseAdapter 调试 申请权限 gone彻底消失 footerview
// 引用不同的行布局 chatActivity 数据 charMessage
https://github.com/yuxiaoss/LISTVIEWAchieve-interlacing-effect

CardView实现卡片布局效果

// cardview基础 案例实现 添加3D阴影和圆角效果
//常用属性
// build.gradle 添加依赖
// 案例 布局搭建 实体类创建 Msg MsgLab 功能实现MainActivity MsgAdapter
// 适配 value-v21 用属性 资源限定符 内容与圆角重叠 cardusecomptpadding foreground效果
https://github.com/yuxiaoss/CardView

屏幕适配

// 屏幕适配 屏幕尺寸 分辨率px 像素密度dpi 每英寸
// px 像素 dip dp 160dpi sp字体大小
// ldpi mdpi hdpi xdpi
// 屏幕适配技巧 布局适配 少用px
// 图片适配 点9图 使用自动拉伸图
https://github.com/yuxiaoss/Screen-adaptation-

3.31 星期三

数据存储

Android本地文件操作

// android 常用数据存储
//sharepreference 使用 存放类似登录的配置信息 xml文件 shared_prefs 键值对方式 操作模式
// ShareActivity 存放 使用信息
// 外部存储externalstorage 内存memory 内部存储 internalstorage externalstorage
// storage mnt文件夹 公有目录 私有目录 应用包名
// 外部存储的操作externalActivity 加权限 写的权限 映射文件l 动态权限 获取外部存储目录files 临时文件 cache
// 内部存储app data internalactivity 一般先试用外部存储
// filenotfound异常解决方案 路径 权限处理 设备有没有sdcard
// DDMS中的data、sdcard目录无法展开
https://github.com/yuxiaoss/-Android-local-file-operation-

02 Android数据库操作

// sqlite数据库 轻量级 关系型数据库 记录 字段 属性 域
// sqlite expert 工具 建库 建表 DDL 数据库定义语音
// DML 数据库操作语音 添加语句 insert into 表 (字段)values(值)
// 删除语句delete from 表 删除行
// 修改语句 update 表 set 列名 = 更新值 where
// 查询语句select * 字段 列 form 表 where 条件 gender=“男”
// Android中对sql语句 界面布局
// SQLiteOpenHelp类的作用 创建 打开数据库
// sqlitedatabase类的操作 增删改查 创建表 查找表 下划线id adapter不能识别 清除数据
// API操作数据库 MainActivity2
// 数据查询 group by 分组
// 使用面向对象思想封装数据库操作(进阶)
// DAO data access object 可变长度的参数 删除操作 修改
https://github.com/yuxiaoss/Android-database-operation

手风琴特效 expandablelistview 可扩展

// 联系人分组
// 案例开发 bean创建 chapter类 分组条目 chapteritem子条目
// 适配器实现 adapter tools
// 模拟数据创建 chapterlab
// expandablelistview属性方法设置 layout属性 父类属性 inflate
// 复杂案例 数据逻辑处理 chapterBiz 网络数据处理 utils
// Biz业务逻辑实现 chapterdbhelper
// UI实现层
https://github.com/yuxiaoss/ExpandableListView

broadcastreceived 广播接收器 组件之一

// 基础概念WiFi到流量 注册 静态注册限制 动态注册
// 注册监听系统广播 静态注册系统广播 系统广播 manifest 四大组件声明 静态注册广播 imoocbroadcastreceiver
// 动态注册系统广播 可以取消掉
// 生命周期 最大执行10秒 主线程 取消注册 内存泄漏 合适的地方使用广播
// 自定义广播 重点 内存泄漏 APP间的广播 build.gradle
https://github.com/yuxiaoss/broadcastreceived

APPlication类实现

// 自定义application类 framwork层
// 生命周期 进程消失 系统管理
// 回调方法
// Application对象作用 全局变量
// 静态单例 Otto 尽量用单例
https://github.com/yuxiaoss/Application

4.01 星期四

流行框架

01 OkHttp网络操作框架

// okio 包 解决io包的问题 添加包的问题 依赖 对javaio
// I/O 输入输出 程序的角度 内存 buffer
// bytestring类 encodeutf8 处理数据
// okio - buffer 提高读写效率 输入流 source 输出流 sink 访问数据 存储数据
// Okio.buffer 方法
// OkHttp Dependencies添加依赖 清单文件 网络请求 OKhttpdemo request
// get - response 异步请求
// post
https://github.com/yuxiaoss/OkHttp

4.02 星期五

02 EventBus事件总线 进行事件的发布和订阅

// 案例 基础activity 监听 发布publisherDialogFragment 耦合到一起
// 使用本地广播通信 接收广播 注册监听 解析action 发送广播 鉴别广播
// EventBus入门 中介 事件 订阅 发布 添加依赖机器人的 subscribe 注册注解
// UI线程 更新界面 后台线程 耗时操作
// POSTING线程模式 postingevent 默认的线程模式 发布和监听接收都在一个线程
// main 线程模式 订阅 实在主线程 定义事件mainevent 订阅回调函数都是在主线程 可以更新界面
// main_ordered 发布方不会被阻塞
// 创建事件类型 添加处理事件订阅回调 backgroudevent 处理事件运行在后台线程
// ASYNC 订阅方在一个新线程
// sticky粘性事件 先发布 后订阅
// 配置 proguard rules混淆规则 告诉构建函数保留订阅回调函数
// 事件-订阅-发布 threadmode 订阅回调函数运行的线程模式
https://github.com/yuxiaoss/EventBus

4.03 星期六

recyclerView 瀑布流的布局

展示大量数据
// 工作流程 灵活可配置 布局管理 layoutmanager adapter viewholder 数据 适配器 布局管理器 不同的展示效果
//RecyclerView数据显示(重点)依赖 引用recycleview
// 线性布局 刷新adapter方法 反向数据 设置LinearLayoutmanager
// 设置网格布局 瀑布流布局

4.04 星期天

Glide图片流行框架

加载图片
// 原生代码加载网络图片 注意事项 图片过大 内存溢出 网络安全xml配置文件
// Glide基本用法 加载glide库 配置使用流程 配置glide
// glide 高级用法generated API 支持库 全局变量的配置 常用方法 占位图
https://github.com/yuxiaoss/glide

4.05 星期一

GreenDao数据库框架

// ORM greendao引用GitHub地址 build.gradle
// 创建数据库会话 注解 Entity 实体类 Markproject
// UI介绍 notifyDataSetChanges 通知UI数据发声变化
// 插入数据greendaomanager
// 数据查询 删除和修改数据 onsure 重新查询
// 数据库加密 引入 用Markproject生成
https://github.com/yuxiaoss/GreenDao

4.06 星期二

极光推送 服务器端发送的通知

// 实现推送的方式 客户端定时轮询 客户端与服务器的长连接
// 短连接 长连接 始终保持连接 实现原理
// Android常用推送平台 GCM 极光推送 jpuch UPuch
// 集成极光推送 注册 登录 SDK集成
// 下载SDK jar包在libs里 os文件 激活jpush
// 自定义消息 通知消息
// 极光推送的高级应用
https://github.com/yuxiaoss/jPush

4.07 星期三

webview ui组件

// 常用方法 重点
// 加载网页的四种方式 loadURL(String) 判断版本使用调试
// 控制网页的前进和后退 样式 大写效果
// 状态管理 onresume activity声明周期
// 常用类
// 对webview进行配置和管理websettingsz 控制JS代码 控制网页的缩放
// 控制webview缓冲策略 清理缓存
// webviewClient类 处理网页加载时的各种回调通知
// 资源请求回调方法 return 非空
// 地址拦截 shouldoverrideurlloading 重写加载新的url回调
// 发送错误时的处理 回调 请求新的地址
// webchromeclient类 处理页面信息 对话框 标题 进度等
// Android webview 与JS交互 去调用JS代码 alert方法 loadURL 直接取值
// JS调用Android代码 通过拦截JS请求回调方法 对象映射onandroidfunction
https://github.com/yuxiaoss/webview

4.08 星期四

ButterKnife实现View注入

// 使用方法
// 引入依赖库 绑定view 资源 事件
// 注入listview事件 注入recycleview
// butterknife zelezny 插件学习 选中activity资源绑定控件
// 分析源码 反射代码 项目 慕课电影
https://github.com/yuxiaoss/ButterKnife

4.09 星期五

百度地图

第三方SDK 下载demo 查看文档
// 创建应用 获取SHA1 生成keystore 文件 创建apk 添加jar 依赖 混淆配置
// 运行示例 地图切换
// 权限处理 获取经纬度
// 定位功能实现 图标的角度
// 添加商家marker
// 显示商家信息
https://github.com/yuxiaoss/Baidumap

4.10 星期六

项目实战

仿外卖开发点餐APP

// 基础功能实现
// 工程创建与素材准备
// 闪屏页实现splashactivity 内存泄漏 没有全屏 设置声明设置 主题的编写
// 登录页实现 登录按钮 有样式设置点击的学习 finish
// 注册页面实现 include baseactivity
// 数据介绍一级biz 业务相关的类 UI bean业务 httpOK网络请求 Picasso图片 jarjson包
// net commoncallback类 获取type类型 泛型的类型
// 登录业务实现 utils T 封装tasto reqapplication 初始化 gson 保存登录信息 和cookie 用静态方法 移除cookie
// 注册业务逻辑实现
// 订单实现 自定义点击事件 上拉 下拉
// 商品展示界面 业务实现 立即支付 back后是登录状态
// 商品详情页 订单详情页
https://github.com/yuxiaoss/Takeaway-orderAPP

4.11 星期天

开发阅读器 小慕阅读

// 开发阅读器 小慕阅读
// 使用GitHub加载第三方库的介绍 网络请求loopj gson bookview
// 流程分析
// Splash界面 闪屏页实现 由上往下布局 handler倒计时 内存泄漏 对activity进行弱引用 rkkhandler rkk LIVE temp设置
// 消息池 不用new 跳到下一个页面
// 新建下一个页面 书籍列表界面 请求网络 json 转换对象 用注解找对应的key plugins插件 gsonformat 显示数据列表
// 下载书籍 乱码 点击下载 下载失败 点击打开
// 加载书籍 引用书本的类view 全屏的显示 书籍进度
// 设置界面布局 中间点击事件 做回调 设置界面菜单
// 设置书签 封装打开书籍方法 重绘 设置背景
// 语音朗读 第三方的SDK 系统的 跳转进度
https://github.com/yuxiaoss/BookApplication

4.12 星期一

Android高级应用

sercice 基础

// service基础
// 四大组件 没有界面的activity 在后台处理耗时操作 不受activity生命周期影响
// 启动服务 生命周期 startservice() oncreate onstartCommand stopservice() onDestory
// 绑定服务 bindservice oncreate onBind unbindservice onUnbind onDestory()
// 实现IBinder 接口 实现进度监控
// serviceConnecttion 用于绑定客户端和service
// 进度监控
https://github.com/yuxiaoss/service

4.13 星期二

02 AIDL实现远程服务的通信

// Android interface definition language 进程间的通信接口
// 服务的启动及绑定
// 远程启动服务 应用之间启动 声明service 配置文件
// 远程绑定服务 绑定的时候自动创建服务
// 创建AIDL文件 两个进程中间数据共享 build 自动生成java文件
// 实现AIDL
// 远程监控服务进度
https://github.com/yuxiaoss/AIDL

4.14 星期三

03 ContentProvider初体验

四大组件之一
// ContentProvider和他的兄弟(重点) 配置 uri 提供目标地址 contentresolver
// contentprovider中常用方法 oncreate 打开 创建 数据库
// 界面搭建
// insert方法 获取id
// query方法 数据刷新flag
https://github.com/yuxiaoss/ContentProvider

4.15 星期四

04 Socket&Https通信

https://github.com/yuxiaoss/04-Socket-Https-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值