知识点
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机制