美文网首页
【Android】其它问题记录

【Android】其它问题记录

作者: irenb | 来源:发表于2019-05-09 18:52 被阅读0次

1. 包名显示切换

记录1 - 包名显示切换

2. 设置启动页面

记录2 - 设置启动页面

3. 隐藏导航栏


默认显示 actionBar
去掉 actionBar 的显示

4. match_parent 和 wrap_content 的区别

  • match_parent:完全匹配父布局大小,大小与父布局有关。(表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小)
  • wrap_content:自适应大小,大小与内容有关。( 表示让当前的控件大小能够刚好包含里面的内容,也就是由控件内容决定当前控件的大小)

5. 目前常用的网络框架

  • volley(由Google推出)
  • 安卓系统api
  • okhttp(推荐使用!非常高效,支持 SPDY,连接池,GZIP / 压缩 JSON 和 HTTP 缓存,Cookie)

6. 项目中如何引入第三方框架

  • 手动添加 jar 包
    参考:https://jingyan.baidu.com/article/fdbd427789d604b89f3f4859.html
  • 使用 Gradle 引入:(下面是使用 Gradle 引入 okhttp 框架的三种方式)
    方式1:compile 'com.squareup.okhttp3:okhttp:3.12.1'
    方式2:api 'com.squareup.okhttp3:okhttp:3.12.1'
    方式3(推荐使用!):implementation 'com.squareup.okhttp3:okhttp:3.12.1'

使用 Gradle 引入框架时,编译项目 Android Studio 就会自动帮我们去下载。


  • Android 中 gradle 文件中 implementation 、 compile 和 api 三者的异同:
    implementation 不可以依赖传递,compile 和 api 可以依赖传递。

举例说明:
如果一个 App 依赖于 libA,libA 又依赖于 libB,使用 implementation 时 App 不可以调用 libB 中的方法,使用 compile 时则可以调用。推荐还是 implementation,避免跨依赖调用,导致模块之间耦合性过高,管理起来混乱。

compile 或 api 关键字作用效果是一样的,使用时可以互相替换。实际上,api 关键字是用来替代 compile 关键字的,因为 compile 关键字将来会被弃用(Android Studio 3.0 以后已废弃)。在高版本的 gradle,使用 compile 关键字会报错并提示使用 api 关键字代替。

  • 特别提示:
    引入 okhttp:3.13 及以上版本的库,在 Android4.x 系统上运行会报如下错误,所以如果项目要兼容 Android4.x 系统,可以选择引入 okhttp:3.12.1 版本的库。


7. 设置全屏显示(隐藏系统状态栏)

// 设置全屏显示(隐藏系统状态栏),支持Android2.0以上
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

8. 在清单文件中添加网络访问权限

<uses-permission android:name="android.permission.INTERNET" />

在 Android 6.0 之前是通用的,直接在 AndroidManifest.xml 文件中进行注册即可。
在 Android 6.0 之后加入了运行时权限,申请权限访问需要两步:
1》先在清单文件 AndroidManifest.xml 文件中进行注册
2》在运行的时候,还要使用代码来申请。

9. okttp 框架简单的使用

/* 一个简单的网络请求 */
public void getNewListData() {
    // 1.创建 OkHttpClient 实例对象
    OkHttpClient client = new OkHttpClient();
    // 2.创建 Request 对象
    Request request = new Request.Builder()
            .url("https://3g.163.com/touch/reconstruct/article/list/BBM54PGAwangning/0-10.html")
            .get()
            .build();
    // 3.执行 Request 请求(异步执行)
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            // 请求失败
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if (response.isSuccessful()) {
                // 请求成功,获取接口的数据
                String data = response.body().string();
                Log.i("okHttp的请求结果:", data);
            } else {
                // 请求失败
                Log.i("okHttp的请求失败:", null);
            }
        }
    });
}

10. gson 框架简单的使用

// 判断字符串是否为空
if (!TextUtils.isEmpty(data)) {
    // 数据解析:Json字符串转对象
    Ads ads = new Gson().fromJson(data, Ads.class);
    if (null != ads) {
        Log.i("数据解析成功", ads.toString());
    }
}

11. service 和 intentService

  • service 会造成 nar,不能做耗时的操作(4大组件都不能做耗时操作)。
  • 做耗时操作除了可以用子线程外,还可以使用 intentService,intentService 用法和 service 一样,开启以后就在后台开始跑,跑完以后就会自己关闭,不需要去管它。
  • 举例:可以使用 intentService 去下载网络图片
    Serializable(序列化):对象转换成数据流,对象就可以在网络上传输,在另一边接收的时候再把数据流转化成对象。
    编码习惯:不要使用硬编码,即不能直接把常量写死进行使用,需要封装起来进行使用。

12. 加载网络图片(glide 框架)

  • 使用 Gradle 引入框架:
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
  • 框架的使用:
Glide.with(this).load(imageUrl).into(adsImageView);
// 或
Glide.with(this).load(imageUrl).placeholder(R.drawable.loading_spinner).into(adsImageView);
  • 回到主线程(UI线程)更新页面
// 在主线程中更新UI
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // 执行更新操作
    }
});
  • 生成0~N之间的随机数
Random rand = new Random();
int randNum = rand.nextInt(N);
// 生成 0-N 之间的随机数,包括 0,不包括 N。
  • 给图片设置点击事件
// 给图片设置点击事件
adsImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});
  • Handler 的功能:
    1》切换线程

13. Java中没有枚举类型,在实际开发中要学会定义常量来代替枚举类型

// 建造师
public static final int TYPE_BUILDER = 0;
//人员
public static final int TYPE_WORKER = 1;

int mType = TYPE_BUILDER;

相关文章

网友评论

      本文标题:【Android】其它问题记录

      本文链接:https://www.haomeiwen.com/subject/hpugoqtx.html