• 知识点


    1、java反射机制:

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    2.Activity的四中启动模式

    • standard:标准模式,这是系统默认的默认,也就是说你不设置Activity的launchMode时,默认的就是standard。在这种模式下,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否存在。在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈,但是这是有条件的,前提是启动它的Activity不能是singleInstance,因为singleInstance只能独立于一个任务栈中,不能有其他的Activity实例,这个后面我们会验证。比如非singleInstance模式的Activity A启动了标准模式的Activity B,那么Activity B就会进入到Activity A所在的任务栈。使用场景:大多数Activity。

    • singleTop:栈顶复用模式。在这种模式下,如果Activity已经在任务栈的栈顶了,当再次启动同一个Activity的时候,这个Activity不会被重新创建,而且它的onNewIntent()方法会被调用,但是它的onCreate()、onStart()方法不会被调用。此模式下的Activity也会进入启动它的非singleInstance模式的Activity所在的任务栈中。使用场景如新闻类或者阅读类App的内容页面。

    • singleTask:栈内复用模式。在这种模式下,只要Activity存在栈内,那么多次启动这个Activity都不会重新创建实例,系统会调用它的onNewIntent()方法。此外有个需要注意的地方:singleTask有clear top的效果,也就是说会将其以上的Activity全部出栈。

    • singleInstance:这是singleTask的一种加强模式,除了singleTask所有特性以外,具有此模式的Activity只能单独位于一个任务栈中

    3、Android中的动画有哪几类

    分为帧动画、补间动画和属性动画

    帧动画:配置一组图片,按照规律动态播放

    实现:在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长

    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
                <item android:drawable="@drawable/g1" android:duration="200" />
                <item android:drawable="@drawable/g2" android:duration="200" />
                <item android:drawable="@drawable/g3" android:duration="200" />
            </animation-list>

    补间动画:

    4、如何将一个Activity设置成窗口的样式

    android :theme="@android:style/Theme.Dialog"

    5、什么是ANR 如何避免它?

    ANR:Application Not Responding。在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应,当用户操作的在5s内应用程序没能做出反应,BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无响应对话框,这既是ANR。

    避免方法:Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。

    6、Android内存泄露及管理

    当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。

     内存泄漏是造成应用程序OOM的主要原因之一!我们知道Android系统为每个应用程序分配的内存有限,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过这个系统分配的内存限额,这就造成了内存溢出而导致应用Crash。

    Handler造成的内存泄漏:

    public class MainActivity extends AppCompatActivity {
        private MyHandler mHandler = new MyHandler(this);
        private TextView mTextView ;
        private static class MyHandler extends Handler {
            private WeakReference reference;
            public MyHandler(Context context) {
            reference = new WeakReference<>(context);
            }
            @Override
            public void handleMessage(Message msg) {
                MainActivity activity = (MainActivity) reference.get();
                if(activity != null){
                activity.mTextView.setText("");
                }
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mTextView = (TextView)findViewById(R.id.textview);
            loadData();
        }
    
        private void loadData() {
            //...request
            Message message = Message.obtain();
            mHandler.sendMessage(message);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacksAndMessages(null);//是移除消息队列中所有消息和所有的Runnable
        }
    }

     7、handler机制

  • 相关阅读:
    如何在IIS添加MIME扩展类型
    如何在ASP.NET的web.config配置文件中添加MIME类型
    Entity Framework 数据库先行、模型先行、代码先行
    Entity Framework 代码先行之约定配置
    netcore3.0 IOptions 选项(一)
    netcore3.0 IFileProvider 文件系统
    netcore3.0 IServiceCollection 依赖注入系统(三)
    netcore3.0 IServiceCollection 依赖注入系统(二)
    netcore3.0 IServiceCollection 依赖注入系统(一)
    netcore3.0 IConfiguration配置源码解析(四)
  • 原文地址:https://www.cnblogs.com/chhom/p/9087777.html
Copyright © 2020-2023  润新知