zoukankan      html  css  js  c++  java
  • 一手遮天 Android

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - 优化: Context

    示例如下:

    /optimize/Demo2.java

    /**
     * Context 的与优化相关的知识点
     */
    
    package com.webabcd.androiddemo.optimize;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Context;
    import android.os.Bundle;
    import android.os.SystemClock;
    import android.util.Log;
    
    import com.webabcd.androiddemo.R;
    
    import java.lang.ref.WeakReference;
    
    public class Demo2 extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_optimize_demo2);
    
            // getApplicationContext() 获取到的 context 是全局的
            // 这个 context 可以随便给别人持有,因为反正是全局的
    
            // Activity 是继承自 Context 的
            // 在 activity 中使用 this,或者在 view 中使用 getContext() 返回的就是当前 activity 的 context,当前 activity 销毁了这个 context 就销毁了
            // 这个 context 不要随便给别人持有,因为如果其他持有人不放手的话,这个 context 就销毁不了了
            // 如果要把 context 给别人持有,又希望当前 activity 销毁了,这个 context 也销毁,则可以通过 WeakReference 来实现,参见下面的例子
            sample();
        }
    
        public static WeakReference<Context> Context;
        private void sample() {
            Demo2.Context = new WeakReference(this);
    
            Thread thread = new Thread(new MyRunnable());
            thread.setName("thread_optimize_demo2");
            thread.setDaemon(true);
            thread.start();
        }
        static class MyRunnable implements Runnable {
            @Override
            public void run() {
                while (true) {
                    // 如果 activity 活着,那么 context 就有强引用,不会被清理
                    // 退出 activity 后,这个 activity 就没有强引用了,此时 context 只有弱引用,那么在 GC 后,这个 context 就会被清理掉
                    Log.i("optimize_Demo2", Demo2.Context.get() == null ? "context 被销毁了" : "context 还活着呢");
    
                    if (Demo2.Context.get() != null) {
                        SystemClock.sleep(1000);
                    } else {
                        break;
                    }
                }
            }
        }
    }
    

    /layout/activity_optimize_demo2.xml

    <?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">
    
    </LinearLayout>
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    May 24th 2017 Week 21th Wednesday
    May 23rd 2017 Week 21st Tuesday
    全球顶尖大学的UX课程资源,英文!
    如何设计出一款出色的结账表单
    快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力
    界面设计中如何增强CTA按钮召唤力?
    10个实用的UX设计作品推销小窍门
    UX术语详解:任务流,用户流,流程图以及其它全新术语
    让你不再恋家的9款小众时尚的酒店网站设计
    聊聊原型设计中的团队管理功能
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_optimize_Demo2.html
Copyright © 2011-2022 走看看