1、umeng分享通过QQ跟QQ空间分享成功或者取消分享没有回调问题

是因为在你的Activity中你自己处理了onActivityResult,而没有调用super.onActivityResult()

2、Android 让应用安装以后自动获取所需的权限(部分特殊权限无法获取)

因为android权限一直在变化,尤其是6.0,7.0, 8.0变化都很多,而且需要动态申请,那么如何让apk在安装成功以后默认开启所需要的权限呢。

可以通过设置targetSdkVersion 的版本号小于23。 默认安装以后权限都是允许。

但是使用这样的方式会引起其他一些问题,
比如:无法使用动态申请权限,判断是否还某个权限需要用PermissionChecker.checkSelfPermission
,跳转设置页面问题(某些应用无法直接跳转到应用权限设置)

3、新建项目如果出现找不到Unable to resolve dependency for’:app@debugAndroidTest/compileClasspath’: Could not resolve junit:junit:4.12.

  • 解决方式一:直接删除junit的测试文件跟项目测试代码,删除干净
  • 添加如下代码带项目的build.gradle文件中,添加阿里云镜像。
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {ext.kotlin_version = '1.1.51'repositories {jcenter{url 'http://jcenter.bintray.com/'}
//        maven {
//            url 'http://maven.aliyun.com/nexus/content/repositories/releases/' //阿里云仓库地址
//        }google()}dependencies {classpath 'com.android.tools.build:gradle:3.0.1'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {google()//        maven {
//            url 'http://maven.aliyun.com/nexus/content/repositories/releases/' //阿里云仓库地址
//        }jcenter{url 'http://jcenter.bintray.com/'}maven { url 'https://jitpack.io' }}
}task clean(type: Delete) {delete rootProject.buildDir
}

也许以上的方式以后还是没有解决问题,那么重启电脑,也许会有惊喜。
##4、Scroller的使用,通过对Scroller源码解析
以及配合view来实现滑动效果可以知道。
Scroller只是一个View滑动的辅助工具类,可以通过该类的对象实时获取当前View的位置,然后通过View自己的绘制过程中调用computeScroll来通过ScrollTo方法来进行滑动,
在滑动过程中要重点注意的就是事件的传递,拦截,还有滑动位置的计算。
##5、实现滑动退出Activity功能
使用SwipeLayouyt库,但是没有办法实现状态栏的沉浸式变化,也就是滑动退出的时候,状态栏也要变换颜色。
实现方式,添加状态栏为透明状态栏,然后通过动态设置startBar来显示。

代码:

public class StateBarTranslucentUtils {public static void setStateBarTranslucent(Activity activity) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//4.4 全透明状态栏activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明实现// activity.getWindow().setStatusBarColor(Color.TRANSPARENT);  //直接用这个方法会有兼容性问题Window window = activity.getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);//calculateStatusColor(Color.WHITE, (int) alphaValue)}}public static void setStateBarColor(Activity activity) {// 设置状态栏颜色ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);setupStatusBarView(activity, contentLayout, Color.parseColor("#FFe04f4c"));// 设置Activity layout的fitsSystemWindowsView contentChild = contentLayout.getChildAt(0);contentChild.setFitsSystemWindows(true);}public static void setWeatherStateBarColor(Activity activity) {// 设置状态栏颜色ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);setupStatusBarView(activity, contentLayout, Color.parseColor("#3F9CD6"));// 设置Activity layout的fitsSystemWindowsView contentChild = contentLayout.getChildAt(0);contentChild.setFitsSystemWindows(true);}public static void setCityBarColor(Activity activity) {// 设置状态栏颜色ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);setupStatusBarView(activity, contentLayout, Color.parseColor("#ff3097fd"));// 设置Activity layout的fitsSystemWindowsView contentChild = contentLayout.getChildAt(0);contentChild.setFitsSystemWindows(true);}private static void setupStatusBarView(Activity activity, ViewGroup contentLayout, int color) {View mStatusBarView = null;View statusBarView = new View(activity);ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));contentLayout.addView(statusBarView, lp);mStatusBarView = statusBarView;mStatusBarView.setBackgroundColor(color);}/*** 获得状态栏高度*/private static int getStatusBarHeight(Context context) {int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");return context.getResources().getDimensionPixelSize(resourceId);}}

6、ScrollView

该控件中嵌套可滑动自定义View的时候,如果在滑动其中View的时候,事件如果可以传递回ScrollView中的话,那么要在自定义View中对onTouchEvent的Action_cancle
做处理,否则会出现界面卡在方式滑动的位置。

7、Chain validation failed 证书验证失败

(1)证书颁发验证有问题
(2)手机时间错误,或者是请求的时候系统时间错误,导致超过了证书的有效期。

8、耗时的操作

1)网络请求
(2)数据库查询
(3)复杂计算
(4)加载字体文件生成Typeface对象
(5)布局嵌套层数太深
(6)自定义View的时候重新绘制次数太频繁
(7)ViewGroup中动态添加多个View,重新计算ViewGroup的高度
如果能在app加载的时候创建的东西,尽量创建,可以节约动态创建时的成本。

9、一个大坑

相信现在很多人都在用CoordinatorLayout + ViewPager + Fragment+ RecycleView等来做写布局文件。而且在写的过程中也许会有滑动卡顿的问题,然后我们会给RecycleView设置俩个方法
mRecycle_infomation.setHasFixedSize(true);
mRecycle_infomation.setNestedScrollingEnabled(false)
那么你要注意了,如果设置了这俩个属性以后,ViewPager可能不会跟着最外边的控件进行滑动,而是自己滑动。在布局的时候一定要想清楚

10、使用AppbarLayout的返回顶部功能

如果AppbarLayout在滑动过程中滑出屏幕外以后,如何让他在回调顶部,也就是展开AppbarLayout布局:
通过设置他的

mAppBarLayout!!.setExpanded(true);
mAppBarLayout!!.setExpanded(true,true)

11、无声通知栏,悬挂式通知栏

无声通知栏需要使用老版本的通知方式
最新版android如果设置通知组,那么点击Intent 需要设置new_task ,否则的话点击通知组会再次吊起应用启动页
悬挂式通知栏:6.0以下是ok的,但是6.0以上的话默认都是关闭状态,不会弹出,除非是原生系统。否则需要手动去设置里边开启通知

12、关于Webp图片的使用

android正式支持webp是在2.2.1以后,所以在使用WebP的时候如果是小于这个版本的话,那么会出现奔溃或者是出现空白这样的情况。
解决方式:
1、自己添加WebP支持,需要使用ndk
2、转webP为png或者jpg。
3、提高自己应用的targetSdk的版本

13、Android 在6.0以上手动关闭权限的话,会导致应用重启,但是重启的时候会有白屏或者黑屏的问题。

解决方式是通过设置清单文件中Activity的theme,设置windowBackGround为启动图即可。

14、PendingIntent问题

android中很多地方会用到PendingIntent,很多人在使用的时候都是

PendingIntent.getActivity(context, 0,
new Intent(context, SplashActivity.class),
endingIntent.FLAG_UPDATE_CURRENT)

或者
PendingIntent.getBroadcast(context, 0,
new Intent(context, CandlarWidget.class)
.setAction(ACTION_RESET_MONTH),
PendingIntent.FLAG_UPDATE_CURRENT)

可以发现requestCode都使用0,一般来说可能没有问题,但是如果有很多地方都使用到了同一个Activity或者Service或者BroadReceiver的话,那么requestCode的值一定不能相同,否则可能会导致你再不同地方使用的Intent总是同一个。数据也是相同的数据。一定要使用不同的值。

15、ViewFlipper:

一个继承自 ViewAnimator的类,该类可以实现view切换时的动画。
使用比较多的是轮播,广告轮播,图片轮播等等。

16、RecycleView 添加heardView 无法铺满宽度问题:

研究发现是因为RecycleView的heardView 无法使用LinearLayout 做为根布局,修改为RelativeLayout就可以了。

17、Android转场过渡动画,元素过渡动画

18、当Activity处于pause 状态的时候。通过广播或者其他方式切换Fragment的时候,无法切换成功。必须要当界面调用onResume的时候才有作用。

19、开发过程中放置图片要注意的点。

最近在开发过程中发现,比较大的图片文件不能放到Drawable 文件夹下,必须要放到 Drawable-mdpi ,Drawable-hdpi等等以dpi 结尾的文件,否则加载已经渲染速度会特别慢,而且在定位问题的时候特别困难。(特别注意)

20、GPU Monitor的各项指标含义:

Misc Time():表示在主线程执行了太多的任务,导致UI渲染跟不上vSync的信号而出现掉帧的情况;出现该线条的时候,可以在Log中看到这样的日志: Skipped xxx frames! The application may be doing too much work on its main thread

Swap Buffers:表示处理任务的时间,也可以说是CPU等待GPU完成任务的时间,线条越高,表示GPU做的事情越多;

Command Issue:表示执行任务的时间,这部分主要是Android进行2D渲染显示列表的时间,为了将内容绘制到屏幕上,Android需要使用Open GL ES的API接口来绘制显示列表,红色线条越高表示需要绘制的视图更多;

Sync:表示的是准备当前界面上有待绘制的图片所耗费的时间,为了减少该段区域的执行时间,我们可以减少屏幕上的图片数量或者是缩小图片的大小;

Draw:表示测量和绘制视图列表所需要的时间,蓝色线条越高表示每一帧需要更新很多视图,或者View的onDraw方法中做了耗时操作;

Measure/Layout:表示布局的onMeasure与onLayout所花费的时间,一旦时间过长,就需要仔细检查自己的布局是不是存在严重的性能问题;

Animation:表示计算执行动画所需要花费的时间,包含的动画有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触发了读写操作等等;

Input Handling:表示系统处理输入事件所耗费的时间,粗略等于对事件处理方法所执行的时间。一旦执行时间过长,意味着在处理用户的输入事件的地方执行了复杂的操作;
Vsync Delay:见Misc Time

21、Android Studio 中ADM 可以打开,但是无法点击问题

最近在使用 ADM 的时候,发现 ADM 能打开,但是点击它的面板没有任何反应,就像卡死了一样,后来在使用 MAT 客户端版本的时候也是一样。

在 stackoverflow 看到了一个一摸一样的问题,详见:
https://stackoverflow.com/questions/47089757/android-device-monitor-freezes-on-mac-os-x

出现上述问题的原因应该是 macOS 与 JDK 版本的原因,在改正之前,我使用的是 jdk-8u152 以及以上的版本,但是原文中说需要将回到 jdk-8u151,于是我就按照题主说的:

1、先使用命令行 sudo rm -rf /Library/Java/* 删除原来安装的 JDK
2、然后下载 jdk-8u151-macosx-x64
另外,还需要记得修改 .bash_profile 文件中的 JDK 路径,以及用 source 命令更新设置

22、Android 系统闹钟添加限制

目前在三星s7手机上现在最多添加 500 个闹钟
下边是错误提示:
java.lang.SecurityException: !@Too many alarms (500) registered from uid 10217
一个uid可以添加500

23、自定义View的时候,如果通过矩阵Matrix对Bitmap对象进行缩放或者其他的操作,会导致Bitmap模糊。

处理方式 :缩放通过Bitmap.createScaledBitmap();
这个方法。

24、battery Historian安装及使用

Battery Historian将来自Batterystats的报告转换为可在浏览器中查看的HTML可视化文件。
Batterystats是一个包含在Android框架中的工具,用于收集设备上的电池数据。 您可以使用adb将收集的电池数据转储到您的开发机器上,并创建一个报告。
1、需要有go环境,git环境
2、需要有adb环境
3、需要安装battery Historian
4、安装完成以后需要通过go环境来运行 setup.go
5、如果第四步正常执行go run cmd/battery-historian/battery-historian.go
如果以上步骤都成功,即可在浏览器中打开localhost:9999

安装过程中要注意的只有3、4俩个步骤。因为整个操作过程都是通过git来管理。而且错误安装错误大多是因为版本问题所导致。可以通过git branch -a 切换到对应分支,pull到对应版本的代码。安装最新版本一般都会有问题。可以切换到2018年的代码分支上。

Android,java知识点总结(三)相关推荐

  1. 跟着鬼哥学android java hook(三)

    按照上文的约定,我们继续第三篇文章,找一个游戏来测试此框架和插件的稳定性. 一个解谜逃脱类的游戏,挺好玩的,我还是未破解情况下玩通上一个版本了,新版本其实也出来两三个月了,过了那个新鲜劲头,就直接破解 ...

  2. Android java 多线程(三)

    转载于:https://www.cnblogs.com/wjw1014/p/8889468.html

  3. Android和java知识点总结

    Android和java知识点总结(均为网络转载,方便复习和学习) 1 java基础部分 1.1 JVM部分 1.2 JVM内存区域(运行时数据区域): 1.3 JVM内存区域(虚拟机栈): 1.4 ...

  4. Java IO在Android中应用(三):Apk加固去壳

    Java I/O在Android中应用(三):Apk加固去壳 前言(废话) 现在在动车上,因为最近接到一个紧急的出差任务,需要去一趟江苏我们移动应用的客户现场.说真的,本来其实我是很困的,但是车上有一 ...

  5. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  6. Android 开发必备知识点及面试题汇总(Android+Java,Kafka是如何实现高性能的

    执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞, ...

  7. Android java时间戳转年月日时分秒(三十七)

    Android java时间戳转年月日时分秒 public String getCurrentTime(long value) {SimpleDateFormat format = new Simpl ...

  8. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  9. Android Camera2 教程 · 第三章 · 预览

    Android Camera2 教程 · 第三章 · 预览 DarylGo关注 Android Camera 上一章<Camera2 开启相机>我们学习了如何开启和关闭相机,接下来我们来学 ...

  10. Android基础知识点学习总结

    Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...

最新文章

  1. C++ 重载运算符 operator
  2. 基于自动驾驶车辆的激光雷达与摄像头之间的在线标定算法
  3. 数据库事务和spring事务的区别
  4. shuffle的工作原理
  5. linux 双机直连设置
  6. 形容PHP程序员的语句,形容程序员的句子
  7. 将 Visual Studio 的代码片段导出到 VS Code
  8. 计算机 ieee access,计算机 | IEEE Access 诚邀专刊稿件 (IF:3.557)
  9. vue.js三种安装方式
  10. 如何在 Mac 上修复丢失的鼠标光标?
  11. 【Android】ListView控件总结
  12. Docker(从入门到部署微服务集群)
  13. HBuilderX ios打包失败(已解决)
  14. PPT太大怎么进行压缩
  15. C# 定时器轮询 设计思路
  16. 水利水电课程指导之建筑制图基础_第三章
  17. Java利用qq邮箱发送邮件
  18. 3_使用seurat sct方法中的reference based处理大数据超过100000个细胞 science advance
  19. autopilot news
  20. 人生修煉電影篇之-------------------- 《海王》

热门文章

  1. 微信Mac 3.0.0内测版上线!终于可以用电脑刷朋友圈了!!
  2. 如何使用PyDenseCRF
  3. 美少年为“苹果”编程挣钱 12岁办软件开发公司
  4. linux文件中的^M
  5. win10怎么连接android手机,如何将手机与Win10电脑关联以在电脑上继续任务?
  6. 使用记事本编写Java程序的运行步骤及乱码问题
  7. 论文阅读:CVPR2022 Rethinking Minimal Sufficient Representation in Contrastive Learning
  8. 解决SecureCRT报错keyboard-interactive authentication with the ssh2 server failed
  9. Python3获取5000个元素的单字符表
  10. 解决Failed to open .ini file C:\Users\xxx\.android\emu-update-last-check.ini for writing.