1 intent传递参数的时候,用 putExtra(key ,value)方法,这里也可以用上bundle,bundle.putString("name", "Ben");bundle.putInt("age", 28);putExtra(bundle)方法。也可以是Intent.setData可以放入数据,Intent.getData可以取出数据
2 横竖屏切换时候Activity的生命周期。
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
3 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?
可以放在不同的Task中。需要为不同的activity设置不同的taskaffinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记
4 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
a 使用startActivityForResult() 方法开启b,b类结束时调用finish();
a类的intent有一个子activity结束事件onActivityResult(),在事件里继续播放音乐
5 在manifest和代码中如何注册和使 用 broadcast receiver 。
1)在AndroidManifest.xml中注册
2)在代码中注册
1. IntentFilter filter = new IntentFilter("com.forrest.action.mybroadcast"); // 和广播中Intent的action对应
2. MyBroadcastReceiver br = new MyBroadcastReceiver();
3. registerReceiver(new MyBroadcastReceiver(), filter);
6 Android提供了5种方式存储数据:
使用SharedPreferences存储数据;
文件存储数据;
SQLite数据库存储数据;
使用ContentProvider存储数据;
网络存储数据
7 不懂的一些问题 ADL;对android虚拟机的理解,包括内存管理机制垃圾回收机制。Android中Task任务栈的分配。 在Android中,怎么节省内存的使用,怎么主动回收内存? 不同工程中的方法是否可以相互调用? 在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?
http://www.jianshu.com/p/9546d21376ed
8 如何判断是否有SD卡?
在程序中访问SDCard,你需要申请访问SDCard的权限
在AndroidManifest.xml中加入访问SDCard的权限如下:
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED
9 NotifactionManager使用原理 activityy的启动模式有哪些?是什么含义?
Thread 和service的区别
10 能说下Android应用的入口点吗?
真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了。 可以没有Activity但是必须有Application
11 Finaliz方法是垃圾收集器删除对象之前对这个对象调用的进行清理工作的方法
12 Listview列表效率优化
(1)利用convertview回收视图
(2)采用ViewHolder模式
(3) 异步加载图片
(4) 快速滑动时不加载图片
(5) 如果自定义的item中有图片,需要处理图片(减少图片所占内存)
1.对图片进行边界压缩 2.用option类来保存图片大小 3.避免图片的实时缩放,最好预先缩放到视图大小
(6)尽量避免在listview适配器中使用线程,因为线程是产生内存泄露的主要原因在于线程的生命周期不可控。
13.应用内存优化
(1)bitmap设置图片大小(优化内存溢出)
BitmapFactory.Option option = new BitmapFactory.Option();
option.inSampleSize = 2; //将视图宽、高都变为原来的1/2
(2)bitmap对象销毁,可以借助recycle()方法让GC回收bitmap对象。
(3)尽量避免static成员变量引用资源消耗过多的实例,如:context
(4)使用Application的context
(5)及时关闭资源,如在查询数据库时需要及时关闭cursor
(6)对经常使用的图片使用软引用保存
(7)线程也是造成内存泄露的一个重要原因,在于线程的生命周期不可控制,
14 Thread 和service的区别
答:servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc。而thread是由本应用程序托管。 1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。 2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。 既然这样,那么我们为什么要用 Service 呢?其实这跟 android 的系统机制有关,我们先拿 Thread 来说。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。 举个例子:如果你的 Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该 Thread 需要在 Activity 没有start的时候也在运行。这个时候当你 start 一个 Activity 就没有办法在该 Activity 里面控制之前创建的 Thread。因此你便需要创建并启动一个 Service ,在 Service 里面创建、运行并控制该 Thread,这样便解决了该问题(因为任何 Activity 都可以控制同一 Service,而系统也只会创建一个对应 Service 的实例)。 因此你可以把 Service 想象成一种消息服务,而你可以在任何有 Context 的地方调用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也可以在 Service 里注册 BroadcastReceiver,在其他地方通过发送 broadcast 来控制它,当然这些都是 Thread 做不到的
15 一个线程在访问一个对象的同步方法时,另一个线程可以同时访问这个对象的非同步方法。
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个同步方法
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个对象的另一个同步方法。
网友评论