美文网首页
【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