Android学习问题大集合(持续跟新中)
1:百度地图
(1)在studio开发,一般就是把解压的sdk按要求放入libs(放.jar包)和新建的jniLibs(放.so)包中。但是我这样老是有问题,获取不到经纬度的值。
解决办法:在libs包中在复制一份armeabi-v7a。(只有基础定位sdk可以,我在加了计算sdk时候,和我原来的armeabi文件冲突。找不到.so。????)
(2)我在libs包中有一个armeabi,复制一份armeabi-v7a。在百度地图的基础定位功能sdk加了计算的sdk,出现如以下图
解决办法:把armeabi中的.so 文件移到armeabi-v7a。
(3)在百度地图API开发中已知两个点之间的经纬度坐标计算其距离
public String getLatLngDistance(LatLng start, LatLng end){
//自己实现距离算法:
/**
* 计算两点之间距离
* @param start
* @param end
* @return String 多少m , 多少km
*/
double lat1 = (Math.PI/180)*start.latitude;
double lat2 = (Math.PI/180)*end.latitude;
double lon1 = (Math.PI/180)*start.longitude;
double lon2 = (Math.PI/180)*end.longitude;
// double Lat1r = (Math.PI/180)*(gp1.getLatitudeE6()/1E6);
// double Lat2r = (Math.PI/180)*(gp2.getLatitudeE6()/1E6);
// double Lon1r = (Math.PI/180)*(gp1.getLongitudeE6()/1E6);
// double Lon2r = (Math.PI/180)*(gp2.getLongitudeE6()/1E6);
//地球半径
double R = 6371.004;
//两点间距离 m,如果想要米的话,结果*1000就可以了
double dis = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R;
NumberFormat nFormat = NumberFormat.getNumberInstance(); //数字格式化对象
if(dis < 1){ //当小于1千米的时候用,用米做单位保留一位小数
nFormat.setMaximumFractionDigits(1); //已可以设置为0,这样跟百度地图APP中计算的一样
dis *= 1000;
return nFormat.format(dis)+"m";
}else{
nFormat.setMaximumFractionDigits(2);
return nFormat.format(dis)+"km";
}
}
(4)PopupWindow中点击Spinner 显示
android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity
running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:598)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:341)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.widget.PopupWindow.invokePopup(PopupWindow.java:1279)
at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:1118)
at android.widget.ListPopupWindow.popupShow(ListPopupWindow.java:1885)
at android.widget.Spinner$DropdownPopup.popupShow(Spinner.java:1189)
结局方案:Spinner的XML文件中添加一条属性android:spinnerMode="dialog"即可
(5)文字显示你需要支付¥50,一般是用两个TextView控件,怎样才能只用一个TextView控件?
在string.xml定义as,%1$s代表的是输出字符串
<string name="as" >你需要支付: %1$s</string>在用sapnnableStringbuilder获取文字内容,在设置setpan()。
tv_monkey.setText(getString(R.string.as,as)); SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(tv_monkey.getText().toString()); ForegroundColorSpan span = new ForegroundColorSpan(Color.RED); spannableStringBuilder.setSpan(span, 5, tv_monkey.getText().toString().length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); tv_monkey.setText(spannableStringBuilder);
(6)scollview不能滚动特殊原因
偶然发现,ScrollView的滑动效果出不来,经过很多试验,发现是在我的Activity当中,我使用了如下的代码段: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
(7)poupwindow被虚拟导航栏遮挡
在使用PopupWindow时,在华为P6等自带虚拟导航栏的手机,底部被挡住,根据网上说的 :
自定义 LinerLayout ;android:theme="@android:style/Theme.Light.NoTitleBar" ;
什么加getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 都不行,
后面再PopupWindow 的 setContentView()加一句setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
(8)科大讯飞人脸识别问题,初始化代码写了,但是还是出现错误码10111(初始化不成功)
用studio开发人脸识别的.so文件和.jar,分别在jniLibs文件和libs中,还要在build.gradle里面配置,跟buildTypes同级,加上
sourceSets{
main{
jniLibs.srcDir(['libs'])
}
}
(9)Android Studio 2.3版本 Run项目不能自动启动APP(即时运行)问题
解决方法:打开设置—-搜索’run’,显示下图界面——取消勾选Instant run;
(10) java.lang.NoSuchMethodError: No static method getFont,在用recyclerview的时候报这种错误。
解决方法:把recyclerview的版本改成appcompat一致的。
关于Android技术准备,主要是包含下面几项:
- 项目经历
- java基础
- 设计模式
- 算法
- 网络相关知识
- Android基础
- Android源码
- Android性能优化
- 开源库源码
面试问题:
1.事件分发流程
2.View的渲染机制
3.动画的原理,底层如何给上层信号
4.编译打包的过程
5.Android如何找到相应的资源文件
6.ANR的原理
面试问题:
1.Bitmap使用时候注意什么?
2.OOm是否可以try catch
3.内存泄漏如何产生?
4.适配器模式,装饰者模式,外光模式的异同
5.ANR如何产生?
6.stringbuffer和stringbuilder的区别
7.如何保证线程安全
8.java4中引用
9.Jni用过么
10.多进程场景见过么
11.关于handler,在任何地方new handler都是什么线程下?
12.sqlite升级,增加字段的语句
13.bitmap recycler 相关
14.强引用置为null,会不会被回收
15.glide使用什么缓存
16.Glide内存缓存如何控制大小
17.如何能保证多线程读写文件的安全
面试问题:
1.线程与进程的区别
2.为什么要有线程,而不是仅仅用进程
3.算法判断单链表成环与否
4.如何实现线程同步
5.hashmap数据结构
6.ArrayList和linkedlist异同
7.oject类的equal和还是从的方法重写,为什么
8.hashmap如何put数据(从hashmap源码角度讲解)?
9.简述IPC?
10.fragment之间传递数据的方式?
11.简述tcp四次挥手?
12.threadlocal原理
13.内存泄漏的可能原因?
14.用IDE如何分析内存泄漏?
15.OOM的可能原因?
16.线程死锁的4个条件?
17.差值器&估值器
-
简述消息机制相关
-
进程间通信方式?
-
Binder相关?
-
触摸事件的分发?
-
简述Activity启动全部过程?
-
okhttp源码?
-
RxJava简介及其源码解读?
-
性能优化如何分析systrace?
-
广播的分类?
-
点击事件被拦截,但是相传到下面的view,如何操作?
-
Glide源码?
-
ActicityThread相关?
-
volatile的原理
-
synchronize的原理
-
lock原理
-
翻转一个单项链表 1->2->3->4->5->null =====> 5->4->3->2->1->null
-
string to integer
-
合并多个单有序链表(假设都是递增的)
-
Activity生命周期简述
-
.常见内存泄漏情景及避免内存泄漏的措施
-
Actvity启动模式简述
-
简绘观察者设计模式UML图
-
算法,求公共子序列(或者是子串,记不清了)
-
Java四种引用
-
自定义view重写哪几个方法?
-
http 的session&cookie的区别
-
简述工作线程更新UI的方法
-
应用最多占多少内存
-
滑动卡顿如何解决(不同原因及对应处理方式)
-
自定义view实战
-
多线程,多进程 相关
-
Java四种引用的使用
-
XX项目你负责什么
-
Sqlite 怎么增加一个字段
-
XX项目中是怎么创建数据库的
-
Sqlite 怎么删除一个字段
-
有什么你觉得自己做得好的地方
-
为什么用Retrofit(一个开源库)
-
Retrofit与之前的网络库有什么优势
-
XX项目中你们自己定义的线程池来管理任务,不使用框架,那么,后来新的项目怎么设计的
-
你认为Rxjava的线程池与你们自己实现任务管理框架有什么区别?
-
内存泄漏的常见场景
-
怎么发现&分析内存泄漏
-
处理有序数组为什么比无序数组更快 参考StackOverflow
-
热修复与插件化相关
-
Integer类是不是线程安全的,为什么
-
不使用同步锁如何实现线程安全
-
面试头条的时候在线编程:从上到下从左到右输出二叉树
-
针对concurrent包下面的一些类的问题
-