- 博客(63)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android常用adb命令
1.列举出所有包含[intent]的包名adb shell pm list packages [option] [intent]例如:列举包名含有com.android的packageadb shell pm list packages com.android2.强制关闭一个应用程序adb shell am force-stop [PACKAGE]例如:通过指定包名强制关闭设置adb shell am force-stop com.android.settings3.命令行下启动应用程
2020-12-08 14:11:14
861
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 关于Android7.0适配(SDK24)
##一、FileProvider对于 Android 7.0,提供了非常多的变化,不过和我们开发者关联最大的,或者说必须要适配的就是去除项目中传递 file:// 类似格式的 Uri 了。对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在应用外部公开 file:// URI , 如果一项包含文件 URI 的 intent 离开应用,则应用出现故障,并出现 FileUriExposedException 异常。要应用间共享文件,您应发送一项 c
2020-11-28 16:11:39
1193
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android线程池ThreadPoolExecutor使用
1、ExecutorService,它是一个接口,其实如果要从真正意义上来说,它可以叫做线程池的服务,因为它提供了众多接口api来控制线程池中的线程,而真正意义上的线程池就是:ThreadPoolExecutor,它实现了ExecutorService接口,并封装了一系列的api使得它具有线程池的特性,其中包括工作队列、核心线程数、最大线程数等。ThreadPoolExecutor,我们要创建一个线程池只需要new ThreadPoolExecutor(…);就可以创建一个线程池。直接使用线程的弊端:
2020-10-24 12:08:49
652
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android 使用AIDL传递序列化数据
本次测试的是客户端和服务端使用Aidl方式实现跨进程通信。准备工作:1.首先定义一个客户端,这边是App0429(com.example.app0429),主要含有一个MainActivity.class2.然后定义一个服务端,这边是App0423(com.example.app0423),主要写一个服务TestService.class3.编写aidl文件这边写了两个Bean类和三个...
2020-04-30 18:46:20
1067
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 在一个app中唤醒拉起另一个app应用(DeepLink拉活)
假如使用A应用拉起唤醒B应用中的某个具体页面:在A中:String url = "app0423://example.com:/main";Intent intent1 = new Intent();intent1.setAction("android.intent.action.VIEW");Uri uri = Uri.parse(url );intent1.setData(uri)...
2020-04-23 17:56:01
2785
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 URL中%数字表示符号对照
HTML Encoding ReferenceURL-encoding : ASCII Character%20 : space%21 : !%22 : “%23 : #%24 : $%25 : %%26 : &%27 : ‘%28 : (%29 : )%2A : *%2B : +%2C : ,%2D : –%2E : .%2F : /%30 : 0%...
2020-04-14 11:34:06
26360
原创 将手机上的已安装应用拷贝出到电脑中
提取的APK文件将保存在指定的文件夹中,通常是在内部存储或SD卡中的“ExtractedApks”文件夹。下载并安装应用管理器:可以使用应用管理器如“ES文件浏览器”或“APK Extractor”。该命令会返回APK文件的路径。选择你想要提取的应用程序,然后选择“提取”或“备份”选项。在手机上启用“开发者选项”和“USB调试”。在电脑上下载并安装ADB工具包。使用USB线将手机连接到电脑。找到已安装的应用程序列表。
2024-06-27 16:31:35
665
原创 Java多线程volatile、atomicInteger、synchronized理解
Java自增操作不是原子性操作,有三步:读,增,写;AtomicInteger:一个提供原子操作的Integer的类。 一种线程安全的加减操作接口, 相比 synchroized、lock 高效.在Java jdk中里面提供了很多Atomic类AtomicXXX:CAS、Unsafe.compareAndSwapIntAtomicLong、LongAdderAtomicReference、AtomicReferenceFieldUpdaterAtomicStampReference:CAS的AB
2021-04-12 14:32:37
339
1
原创 关于bindService
1.如果多次调用bindService进行服务绑定,onBind只会调用一次。2.如果调用bindservice的组件销毁了(比如activity finish了),Serivce会自动调用onUnbind和onDestory方法销毁。3.如果多个组价多次绑定Service,onBind只会调用一次,且所有绑定的组件都销毁了,Service才会销毁。4.多个组件bindService,一个组件调用unbindService,Service无法销毁。5.使用bindService开启的服务和调用它的组
2021-04-12 13:49:56
250
转载 startService和bindService
生命周期:多次调用bindService(),为什么onBind()只执行一次0. 场景为了更方便的说明问题,而又不失共性,本文中考虑下面两种情况:情况一: App A绑定App B的service,App A多次调用bindService(),而不调用unbindService(),此时App B的service的onBind()只执行一次情况二: App A,App C绑定App B的service,App A和App C各调用一次或多次bindService(),而不调用unbindSer
2021-04-10 18:13:29
135
原创 线程相关方法:sleep yeild join
Thread方法Join()方法Thread的非静态方法join()让一个线程等待另外一个线程完成才继续执行。如果线程A执行体中调用B线程的join()方法,则A线程将会被阻塞,直到B线程执行完为止,A才能得以继续执行。**Sleep() 方法:**不会释放锁Sleep——让当前正在执行的线程先暂停一定的时间,并进入阻塞状态。在其睡眠的时间段内,该线程由于不是处于就绪状态,因此不会得到执行的机会。即使此时系统中没有任何其他可执行的线程,处于sleep()中的线程也不会执行。因此sleep()方法常用
2021-04-10 16:38:17
146
原创 java移位运算符详解
首先要了解java负数的二进制表示:计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”反码:原码按位取反补码:反码+1移码:移码(又叫增码)是符号位取反的补码对于负数而言,是以补码的形式存储在内存中的。以-7(int)为例第一步:将-7的绝对值转化为二进制 0000 0111第二步:将上面的二进制以反码表示 1111 1000第三步:转化为补码:111111111111111111111111111
2021-04-09 15:48:36
727
1
原创 Android事件分发方法概述
dispatchTouchEventreturn true:表示该View内部消化掉了所有事件return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费return super.dispatchTouchEvent(ev):默认事件将分发给本层的事件拦截onInterceptTouchEvent方法进行处理onInterceptTouchEventreturn true:表示将事件进行拦截,并将拦截到的事件交由本层控件的onTouchEvent进
2021-03-30 16:42:22
87
原创 git常用命令操作
git initgit add .git commit -m “first commit”git remote add origin https://github.com/iStride17/Client_aidl.gitgit push -u origin mastergit remote -v(查看仓库地址)git status (查看文件状态)git clone https://github.com/iyongfei/test.git(下载项目到本地)git pull origin 分
2021-03-26 19:59:32
177
原创 Android中ontouchEvent,ontouchListener,onclickListener的执行顺序
1.view在执行dispatchTouchEvent的时候先要去判断该view是否有touchListener和执行TouchListener的onTouch方法的返回值。2.TouchListener的onTouch方法返回false,事件继续传递在dispatch方法中调用了同级的onTouchEvent方法3.然后在onTouchEvent方法中的UP事件中判断是否注册有onClickListener,有就执行onclick方法。...
2021-03-13 15:12:32
613
原创 Android ANR、内存泄漏、内存溢出、内存抖动
ANRANR(Applicatino not responding)是指程序无响应,主要原因为:1主线程被io操作阻塞(4.0后网络io不允许主线程中)。2主线程做了耗时任务超过 5秒。3Service做了耗时操作超过20秒,这是由于service默认执行在主线程,可以使用IntentService 。4BroadcastReceiver的onReciver做了耗时操作超过10秒。解决方式:1开一个子线程,使用Handler来处理。2使用AsyncTask来处理耗时任务。内存溢出内存溢出
2021-03-13 13:50:19
571
转载 android 性能优化 -- 启动过程 冷启动 热启动
一、应用的启动方式通常来说,启动方式分为两种:冷启动和热启动。1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。特点1、冷启动:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Applic
2021-03-13 13:39:57
374
转载 JAVA 堆栈 堆 方法区 解析
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配。字符串常量在
2021-03-12 15:02:22
341
原创 Android ldpi mdpi hdpi xhdpi xxhdpi 理解记录
描述(1)分辨率。分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等。720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。(2)屏幕大小。屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。(3)密度(dpi,dots per inch;或PPI,pixels per inch)。从英文顾名.
2021-03-12 14:08:11
387
原创 Android面试知识点整理
1.深入浅出 TCP/IP 协议栈https://www.cnblogs.com/onepixel/p/7092302.html2.MVP+Retrofit2+okhttp3+Rxjava2网络请求https://www.jianshu.com/p/df4eee78085c3.Android Start Service与Bind Service启动Service的异同,IntentService详解https://www.jianshu.com/p/29d622ef646e4.Android之反
2020-12-16 15:23:37
159
原创 Only fullscreen opaque activities can request orientation错误记录
当 三个条件同时满足的时候,系统会抛出"Only fullscreen activities can request orientation"异常。先分别来说说这三个条件都表示什么意思:ActivityInfo.isFixedOrientation(requestedOrientation) ——表示判断当前的|Activity是否固定了方向,truea为固定了方向。fullscreen —— 表示Activity是否是透明的或者是否悬浮在Activity上,是透明的或者悬浮在Activity上ful
2020-12-04 10:20:43
172
原创 Android Activity中screenOrientation各值的意义
landscape:限制界面为横屏,旋转屏幕也不会改变当前状态。portrait:限制界面为竖屏,旋转屏幕也不会改变当前状态。sensor:根据传感器定位方向,旋转手机90度,180,270,360,界面都会发生变化。sensorLandscape:(横屏的旋转,不会出现竖屏的现象)根据传感器定位方向,旋转手机180度界面旋转。一般横屏游戏会是这个属性。sensorPortrait:(竖屏的旋转,不会出现横屏的现象)根据传感器定位方向,旋转手机180度界面会旋转。unspecified:由系统选择
2020-12-04 10:17:38
600
原创 Android WorkManager使用
1.添加依赖api 'androidx.work:work-runtime:2.3.4'或者def work_version = "1.0.0-alpha11" // optional - Firebase JobDispatcher support api "android.arch.work:work-firebase:$work_version" // optional - Test helpers androidTestImplementation "and
2020-11-28 16:19:45
750
原创 Android ContentPrivder使用
ContentPrivder使用:1.自定义一个ContentPrivder,重写对应的方法public class TestProvider extends ContentProvider{ private TestDBHelper mOpenHelper; @Override public boolean onCreate() { mOpenHelper = new TestDBHelper(getContext()); return tru
2020-11-28 16:19:00
301
原创 Android混淆规则
新建一个项目,Android Studio默认关闭代码混淆开关,在build.gradle文件中,如下图所示的minifyEnabled 开关,因此如果需要混淆代码,需将false改为true,然后在文件proguard-rules.pro添加具体混淆规则。android{buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('prog
2020-11-28 16:18:23
1609
原创 android架构模式MVC,MVP,MVVM
###MVCMVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示。当用户出发事件的时候,view层会发送指令到controller层,接着controller去通知model层更新数据,model层更新完数据以后直接显示在view层上MVC还有一个重要的缺陷,大家看上面那幅图,view层和model层是相互可知的,这意味着两层之间存在耦合,耦合对于一个大型程序来说是非常致命的,因为
2020-11-28 16:17:39
165
1
原创 MySQL常用命令
SQL执行一次INSERT INTO查询,插入多行记录insert into test.person(number,name,birthday) values(5,‘cxx5’,now()),(6,‘cxx6’,now()),(7,‘cxx7’,now());1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server— 创建 备份数据的 deviceUSE masterEXEC
2020-11-28 16:16:50
69
原创 关于Android9.0适配(SDK28)
##Android 9 Pie重要功能1、Android 9 Pie 是 Android 的一次重大更新,首先 Pie 带来了一个全新的 Android 仪表板,可以让用户知道其在设备上花费的时间,这与 Apple 的屏幕时间功能类似。应用程序屏幕被重新设计,支持 iPhone X 等带有刘海的显示器设备。Pie 也使用了一种新的基于手势的系统界面,具有类似 iPhone 的滑动功能,可以在操作系统中导航。名为 Shush 的勿扰功能在手机屏幕朝下放置时会使 Android 设备静音,而 Wind Dow
2020-11-28 16:15:41
3265
原创 关于Android8.0适配(SDK26)
##1. 通知栏Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。针对 8.0 的应用,创建通知前需要创建渠道,创建通知时需要传入 channelId,否则通知将不会显示。如下:// 创建通知渠道private void initNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharS
2020-11-28 16:14:02
1479
原创 Android Acitivity状态保存和恢复
问题背景:当前MainActivity添加了四个Fragment分别为AppHomeFrament,AppEditFragment,AppWorksFragment和AppSetupFragment,而在AppSetupFragment中有一个切换夜间模式的功能使用了activity.recreate();导致页面重新创建,并且回到了第一个Fragment(AppWorksFragment)页面,现在需求是需要切换夜间模式之后停留在第四个Fragmnet(AppSetupFragment),因此需要定义一
2020-11-02 16:56:22
231
原创 Android xml格式和json格式互相转换
1、项目的build.gradle添加 maven { url “https://jitpack.io” }allprojects { repositories { google() jcenter() maven { url "https://jitpack.io" } // add this line }}2、app 的build.gradle添加 implementation 'com.github.smart-fun:Xml
2020-11-02 11:47:31
1735
原创 Uri跳转app页面
从app1页面通过Uri打开另app2的页面App1跳转代码: private void toApp() { String url = "app0423://example.com/main"; Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); intent.setPack
2020-10-29 18:21:59
699
原创 RecyclerView实现拖动排序
1、添加万能适配器依赖:implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'2、编写RecyclerView适配器,继承BaseItemDraggableAdapterpublic class CategoryEditAdapter extends BaseItemDraggableAdapter<CategorieBaen, BaseViewHolder> { private List
2020-10-23 14:18:50
750
原创 android导航栏高度计算
public static int getNavigationBarHeight(Activity context) { int height; Display display = context.getWindow().getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getRealSize(point); View deco
2020-10-15 15:47:02
509
原创 Android监听用户导航栏按钮
动态注册广播: private RecentAppsReceiver recentAppsReceiver; //注册广播 public void registerReceiver() { recentAppsReceiver = new RecentAppsReceiver(); IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
2020-10-15 15:43:24
871
原创 Android弹出全局dialog
1、场景 当一个下载任务失败时候,需要再任何页面弹窗提醒用户。2、方案,制作一个dialog样式的activity,使用Application上下文启动。3、代码实现<activity android:name="beyondoversea.com.android.vidlike.activity.download.TaskErrorActivity" android:launchMode="singleTop" andro
2020-10-15 15:40:17
299
原创 gson解析带泛型对象
a、解析对象方法一:Gson gson = new Gson();Test test = gson.fromJson(json, Test.class);方法二:Gson gson = new Gson();Type type = new TypeToken<Test>() {}.getType();Test bean= gson.fromJson(json, type);b、解析带泛型的对象Gson gson = new Gson();Type type = new
2020-09-17 17:58:31
1217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人