- 博客(46)
- 资源 (7)
- 收藏
- 关注
原创 Android中layout_gravity和android:gravity的区别
关于android:layout_gravity和android:gravity的区别可以这样简单的理解:凡是以layout开头属性都是布局属性,用来对父控件做指示的。这样就可以知道android:layout_gravity就是确定当前view在父布局中的位置,而android:gravity使用来确定view中内容在view中的位置...
2022-02-20 22:08:55
1335
原创 AsyncSubject,BehaviorSuject,PublishSubject和ReplaySubject之间的区别
知识无所谓新旧,学到了,让我们成长了就是收获.重新认识一下RxJava中的Subject,是一个桥梁或代理的角色,他即可做observer又可以做observable,因为他即可充当Observer观察数据,还可以充当Observable发射数据.subject的种类针对不同场景提供了四种subject供我们使用,分别视AsyncSubject,BehaviorSubject,ReplaySubject,下面就分析一下他们各自的特点和使用场景.AsyncSubjectAsyncSubject是异步
2022-01-16 19:57:16
2449
原创 android 9.0广播动态注册和接收流程
概述BroadcaseReceiver是Android的四大组件之一,它可以在应用内发送通知也可以Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。一般来说广播可以作为应用和普通用户交流之外的消息传递系统.广播接收者注册方式分在清单声明的接收器,在清单中注册的广播接收器,如果应用没有启动,系统会在广播发出后启动应用利用上下文注册的接收器,利用上下文注册的广播比较灵活,在不需要接收广播时要
2021-02-22 22:05:53
1766
原创 android9.0 Service绑定流程
关系图ContextWrapper到AMS方法调用时序图通过bind方式启动Service首先要调用bindService方法,bindService是在Context中定义的抽象方法,在ContextWrapper实现了该方法, Context mBase; ... @Override public boolean bindService(Intent service, ServiceConnection conn, int flags) {
2021-02-14 11:07:02
505
原创 android 9.0 Service启动流程
Service的start方式启动流源码梳理是基于android 9.0的,在梳理过程考了《android进阶揭秘》,后面对这一块有新的认识会持续更新ContextWrapper到AMSstartService启动第一个跨进程通信,使用启动进程到请求AMS的流程.Activity调用startService方法,调用的是Context中定义的方法,但是这里抽象方法,他的实现类是ContextWrapper.java,在ContextWrapper.java中又调用了mBase的startService方
2021-02-07 15:45:55
560
原创 Android 设置完autoLink属性后自定义跳转到指定界面
在TextView 中设置autoLink 属性可以自动识别Web URL,电话号码,电子邮件地址添加下划线改变字体颜色并实现点击事件,支持自动识别的类型:android:autoLink=“web” 匹配Web URL。android:autoLink=“phone” 匹配电话号码android:autoLink=“email” 匹配电子邮件地址android:autoLink=“map...
2018-11-24 21:07:23
7189
原创 ViewPager+Fragment使用中的几个常见问题总结
1.实现循环切换思路一:在ViewPager的Adapter中返回count的值为 Integer.MAX_VALUE ,进行初始化的时候讲ViewPager的 setCurrentItem(int item) 的方法中传入Integer.MAX_VALUE的一个中间值,因为Int的最大值是2147483647 如果设它的中间值用户是很难滑到两端的,但是并意味着不能滑到两端。思路二:在item...
2018-11-24 20:56:35
1913
原创 Android中在app被系统释放后,重新回到前台时,重建Activity出现Fragment重叠现象
android 开发中Frgment应用场景非常广泛,应用Fragment是必须使用FragmentActivity,有时候会出现这样一种情况,在应用退到后台后,系统会在内存不足时将应用回收掉,再次启动应用会出现Activity中的Fragment重叠现象,其实出现问题的原因是这样的,在回收应用回收前FragmentActivity会调用onSaveInstanceState(Bundle out...
2018-11-24 20:35:41
3176
1
原创 Android 封装BasseActivity
在Android开发中作为四大组件之一的Activity的使用频率非常高,我们的应用展现给用户的每一个界面基本上都离不开Activity。在一个项目中会用到多个Activity用于展示不同内容,虽然展示的内用不同,但是通过观察界面和和代码就会发现有些代码在几个Activity基本是类似的,比如一些头布局和一些广播的注册等。这些代码我们就可以抽取出来封装到一个共同的父类中,具体的实现在之类中实现,这...
2018-09-25 09:10:28
435
原创 Android 首字母索引
Aandroid 首字母索引在一般具有选择联系和城市列表的功能的App中都是非常常见,并且实用性很高。由于之前做的应用真的没有用到过首字母索引的功能,并且android没有提供对应的组件,也就没向这方面考虑过。但是现在的项目要求要有这项功能,并且在网上一搜会有很多,都挺好的,并且大致思想都差不多,所以我也研究了一下,自己实现了一个,并且把自己的实现实例记录了下来。希望能对需要的小伙伴提供帮助。 ...
2018-08-19 12:23:42
5020
2
原创 git commit 模板设置
git config –global commit.template /Users/tao/.template_git(绝对路径)
2018-07-07 17:35:03
27094
4
原创 android CMakeLists.txt文件详解
很多时候时候我们不得不感叹工具的强大是我们的生活和和工作变的越来越简单。在android 的ndk 开发中我们历经了有命令编译到eclipse 在studio 的工具的变迁,这一切都是朝着开发流程越来越简单,开发效率越来越高的方向发展。 今天学习了如何在Studio 使用CMakeLists.txt配置文件进行NDK 开发,感觉流程简单了很多,今天想详细介绍换一下CMakeLists.txt的使...
2018-06-18 12:51:26
5163
3
原创 Kotlin一个简单的Android 程序
上周在https://www.kotlincn.net/docs/reference/ 学习了Kotlin,是在eclipse 安装的插件进行练习的,把里面的知识通过代码练习过后,就有用Kotlin开发android 的冲动。 这个简单的程序就实现了一个拨打电话的功能 AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?&...
2018-06-14 10:56:29
1308
2
原创 linux 环境下通过NDK 生成so文件
下载 .https://developer.android.com/ndk/downloads/index.html 解压下载的文件 tar -zxvf android-ndk-r10b.tar.gz 将eclipse 中的jni 文件夹复制到 解压出来的android-ndk-r10b 目录下 执行 ./ndk-build命令执行完就会在android-ndk-r10b 目录下...
2018-06-12 07:57:24
1273
原创 Ubuntu 安装curl
程序“curl”尚未安装。 您可以使用以下命令安装: sudo apt install curl 已经提示很明确了,sudo apt install curl 先更新一下sudo apt-get updatesudo apt install curl
2017-12-22 20:02:15
132146
2
原创 android AudioTrack
AudioTrack 是一个音频播放器,这个类我们用很少,基本都是使用的是MediaPlayer 或者一些第三方的播放器,其实他们内部也都是调用的audioTrack,为什么不我们不直接使用audioTrack,首先是他支持播放的音频格式少,它只支持播放PCM编码格式的音频流,例如播放MP3格式就需要解码转换成PCM音频流,第三方的播放器就是做了音频的解码和转换。andioTrack 支持两种
2017-12-22 09:09:26
1244
原创 java 反射
今天项目项目中用到了反射,就趁热打铁把自己现在知道的反射知识总结一下,如果有理解偏差和不足的地方,后期进行及时更改。下面进入正题 1 什么是反射: 使用反射可以动态的操纵java代码程序,也就是在java程序运行时加载java代码,反射的定义是能够分析类能力的程序称为反射。 2 反射用什么作用: 使用反射机制可以用来: 在运行中分析类的能力; 在运行中查看对象 实现通用的数组操作代码。
2017-12-17 10:36:42
257
原创 android 连接tftp 服务器
Android 连接TFTP服务器 服务器端:搭建环境:w10 64位系统,服务器为tftp64: Current Directory 为服务器的根目录,存放要下载的文件。 Server interface 是服务器的端口 下面选择Tftp Server 因为这里我们要做Tftp服务器。 Tftp 下载连接 http://tftpd32.jounin.net/ 下载完成直接安装就行
2017-12-15 11:04:13
3591
原创 ubuntu 配置tftp 服务器
fttp服务器搭建 安装服务端和客户端 1.sudo apt-get install tftp-hpa tftp-pha 建立目录: song@song-virtual-machine:~sudomkdir/tftpbootsong@song−virtual−machine: sudo mkdir /tftpboot song@song-virtual-machine:~ sudo
2017-12-12 14:34:40
719
原创 java socket 通信
Java Socket通信 通过Java Socket 实现网络通信,java socket 在java.net 包中,实现通信首先有一个服务端和一个客户端。 开始之前我们先了解一下端口号,TCP /IP的基本知识。 端口号的知识:端口号用来区分计算机不同的服务,范围为TCP/IP协议中的服务端口,端口号的范围从0到65535,0到1023为系统保留的端口号,我们设置端口号的时候要设置102之
2017-12-10 11:13:14
527
原创 深入理解android Handler机制
通过源码理解android 中Handler,Message,Looper,MessageQueue之间的关系,之前说到handler机制,都是在网上看到得别人是怎么讲解的,自己就机械的记下来,回来忘了再到网上搜一堆资料看看,对自己本身能力没有太大的提升。纸上得来终觉浅 绝知此事要躬行。开始试着自己阅读源码,进行深入理解一下。 首先分别介绍一些handler,message,Looper,Mess
2017-11-02 21:11:34
500
原创 Android app 静默安装卸载
实现android apk 的安装和卸载 1实现apk安装/** * 安装APK文件 */ public static void installApk(Context context, String filePath) { File apkfile = new File(filePath); if (!apkfile.exists())
2017-09-12 16:14:01
640
原创 git 问题 warning: push.default 尚未设置
我是一个git小白,很多简单的问题还不顺利解决,问题只能一点点的积累 warning: push.default 尚未设置,它的默认值在 Git 2.0 已从 ‘matching’ 变更为 ‘simple’。若要不再显示本信息并保持传统习惯,进行如下设置:git config –global push.default matching若要不再显示本信息并从现在开始采用新的使用习惯,设置:git
2017-09-05 16:59:12
2773
原创 Error executing aapt: Cannot run program "/home/song/dev_tool/adt-bundle-linux-x86_64-20140702/sdk/b
我是从之前的ubuntu 工作环境中复制过来的项目,两个系统都是ubuntu 16.04,就是不明白了为什么出错。问题 :Error executing aapt: Cannot run program “/home/song/dev_tool/adt-bundle-linux-x86_64-20140702/sdk/build-tools/android-4.4W/aapt”: error=2,
2017-09-01 16:19:56
618
原创 ExpandableListView嵌套Gridview显示不全的问题
自定义GridView重写 onMeasure方法@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_M
2017-08-30 11:41:57
887
原创 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 CD-ROM,这可能会导致客户机无法识别介质的更改。如果可能,请在断开连接之前从客户机内部弹出 CD-ROM。确实要断开连接并覆盖锁定设置吗
客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 CD-ROM,这可能会导致客户机无法识别介质的更改。如果可能,请在断开连接之前从客户机内部弹出 CD-ROM。确实要断开连接并覆盖锁定设置吗? 问题解决: 1.先关闭当前客户机,编辑虚拟机 2.CD/DVD 3 虚拟机——>设置——>CD/DVD(SATA)——>连接中选择“使用ISO映像文件” 在安装系统时指向的是 一般刚
2017-08-25 20:43:51
51097
11
原创 error: redefinition of
问题In file included from jni/driverinterface.c:14:0:jni/android_log.h:26:12: error: redefinition of 'OpenDebug'jni/android_log.h:26:12: note: previous definition of 'OpenDebug' was heremake.exe: ***
2017-08-14 11:47:04
3993
原创 ubuntu 应用程序启动器 “eclipse.desktop“ 还没有被标记为 信任
应用程序启动器 “eclipse.desktop“ 还没有被标记为 信任。如果您不知道这个文件的来源,那么启动它可能会不安全。 解决办法: 选择 eclipse.desktop 的属性->权限->勾选“允许作为程序执行文件” 这样就可以正常使用了
2017-08-12 18:38:07
13464
9
原创 android Toast设置弹框大小
在一般的android开发中我们一般弹出一些提示信息,例如 已打开蓝牙,wifi之类的提示,我们都是会选择Toast进行弹出。今天我们的客户提出们应用弹出提示太小,用户不注意的情况下,容易被忽略掉,要弹出的宽度填充整个屏幕,首先想到是不是需要自定义Toast,经过自己的一番研究后,发现不需要自定Toast,用现有的Toast就可以轻松实现了。 public void showToast(Cont
2017-06-24 18:41:53
10110
原创 android广播
Android 广播 Android 的广播机制介绍 是一种组件之间进行消息传递的一种方式,广播机制是一种基于消息发布和订阅的事件驱动模型,即广播发送者负责发送消息,而广播接受者需要事先订阅消息,让后才能接收到消息。 Android 广播的常用场景 Android的广播使用场景十分常见,如手机来电的广播,收发信息的广播。 Android 广播的类型 无序广播 无序广播是一种完全异步的广
2017-06-24 12:09:29
267
原创 android ExpandableListView 界面更新数据
今天使用ExpandableListView 进行数据更新的时候,发现使用ListView的那一套更新数据的方法行不通,后来在网上查阅了一些资料,发现ExpandableListView 必须进行一次收起展开才能把界面更新,这样问题就比较好解决了,在数据处理完成之后,对指定的位置进行一下收起展开就行了。 collapseGroup(position);收起 expandGroup(positio
2017-01-12 11:31:27
2684
原创 ubuntu linux 下打开draw9patch
ctrl+alt+t打开终端,切换到draw9patch所在的目录 chmod +x draw9patch ./draw9patch
2016-11-17 17:22:58
457
原创 linux 下配置eclipse的启动图标
ctrl+alt+t打开终端 sudo gedit /usr/share/applications/eclipse.desktop 会打开一个文件: 输入如下内容: [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE Exec=/home/song/eclipse/adt-bundle-linux-x86
2016-11-11 10:02:19
1096
1
原创 linux 下android studio 配置svn
linux环境下android studio配置svn http://subversion.apache.org/packages.html#ubuntu 安装指导 1.ctrl+alt+t打开终端 2.在终端输入命令 apt−getinstallsubversion apt-get install subversion apt-get install libapache2-svn
2016-11-09 16:44:30
1181
原创 liunx 下JDK安装及环境变量配置
linux 安装JDK 1.下载JDK 我下载的是jdk1.8.0的 http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 2.在usr文件下创建java文件 sudo mkdir Java 3.下载的jdk文件拷贝或者移动到Java文件下。 sudo cp jdk-8u112-linux-
2016-11-09 11:56:20
417
原创 android 手势滑动
public class MainActivity extends ActionBarActivity { private String TAG="MainActivity"; private GestureDetector gestureDetector; @Override protected void onCreate(Bundle savedInstance
2016-11-02 15:51:15
494
原创 android Notification使用
今天看了一下android的消息提示Notification,别且写了一个小例子,总结一下,一遍以后使用查找方便,同时希望能给需要的朋友提供帮助。 1.创建一个简单的Notification提示。 使用NotificationCompat.Builder对象指定Notification的UI内容与行为 setContentTitle()设置标题 setContentText( )设置内容
2016-10-07 16:41:04
377
原创 android ExpandableListView简单使用
今天在项目中要实现一个可以展开的列表,我首先想到的就是android的ExpandableListView,这个使用起来还是挺方便的,可以对ListView进行收放。现在直接上代码吧。在布局文件中添加 ExpandableListView Activity中的代码public class MainActivity extends ActionBarActivity { private
2016-09-25 00:00:46
425
原创 android 修改系统时间
在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函数来修改系统时间,但是我们在使用的时候如果仅仅的使用这个方法,不用其他设置的话,根本修改不了时间。原因是这里还需要权限的设置。这里所说的权限不是我们平常所理解的像添加访问网络之类的权限。这里要获取的权限是系统的权限。 android:sharedUserId=”android.uid.sys
2016-08-28 11:15:26
1723
原创 android 如何获取第三方app的sha1值
对于android 应用的sha1值和md5值的获取,如果是我们自己的应用,不论是获取测试的和正式的都是比较方便的。但是如何去别人开发的app的sha1和md5呢,并且我们只有apk有没有相关的文档。这种情况大家是很少用遇到,很少遇到,并不证明不会遇到,今天我就遇到了这样的问题。所以想把自己的一些经验分享出来,希望能给大家一些帮助。 1.把apk的格式改为压缩文件,进行解压。 2.在解压出来的文
2016-08-28 10:50:07
6923
学生信息管理系统
2013-01-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人