自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 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 187

原创 关于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 217

原创 Android线程池ThreadPoolExecutor使用

1、ExecutorService,它是一个接口,其实如果要从真正意义上来说,它可以叫做线程池的服务,因为它提供了众多接口api来控制线程池中的线程,而真正意义上的线程池就是:ThreadPoolExecutor,它实现了ExecutorService接口,并封装了一系列的api使得它具有线程池的特性,其中包括工作队列、核心线程数、最大线程数等。ThreadPoolExecutor,我们要创建一个线程池只需要new ThreadPoolExecutor(…);就可以创建一个线程池。直接使用线程的弊端:

2020-10-24 12:08:49 68

原创 Android 使用AIDL传递序列化数据

本次测试的是客户端和服务端使用Aidl方式实现跨进程通信。准备工作:1.首先定义一个客户端,这边是App0429(com.example.app0429),主要含有一个MainActivity.class2.然后定义一个服务端,这边是App0423(com.example.app0423),主要写一个服务TestService.class3.编写aidl文件这边写了两个Bean类和三个...

2020-04-30 18:46:20 417

原创 在一个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 1707

原创 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 945

原创 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 17 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 24

转载 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 19

原创 java移位运算符详解

首先要了解java负数的二进制表示:计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”反码:原码按位取反补码:反码+1移码:移码(又叫增码)是符号位取反的补码对于负数而言,是以补码的形式存储在内存中的。以-7(int)为例第一步:将-7的绝对值转化为二进制 0000 0111第二步:将上面的二进制以反码表示 1111 1000第三步:转化为补码:111111111111111111111111111

2021-04-09 15:48:36 48 1

原创 Android事件分发方法概述

dispatchTouchEventreturn true:表示该View内部消化掉了所有事件return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费return super.dispatchTouchEvent(ev):默认事件将分发给本层的事件拦截onInterceptTouchEvent方法进行处理onInterceptTouchEventreturn true:表示将事件进行拦截,并将拦截到的事件交由本层控件的onTouchEvent进

2021-03-30 16:42:22 15

原创 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 8

原创 Android开发问题记录

2021.3.13

2021-03-13 15:19:39 25

原创 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 57

原创 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 65

转载 android 性能优化 -- 启动过程 冷启动 热启动

一、应用的启动方式通常来说,启动方式分为两种:冷启动和热启动。1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。特点1、冷启动:冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Applic

2021-03-13 13:39:57 36

转载 JAVA 堆栈 堆 方法区 解析

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配。字符串常量在

2021-03-12 15:02:22 39

原创 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 56

原创 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 51

原创 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 19

原创 Android Activity中screenOrientation各值的意义

landscape:限制界面为横屏,旋转屏幕也不会改变当前状态。portrait:限制界面为竖屏,旋转屏幕也不会改变当前状态。sensor:根据传感器定位方向,旋转手机90度,180,270,360,界面都会发生变化。sensorLandscape:(横屏的旋转,不会出现竖屏的现象)根据传感器定位方向,旋转手机180度界面旋转。一般横屏游戏会是这个属性。sensorPortrait:(竖屏的旋转,不会出现横屏的现象)根据传感器定位方向,旋转手机180度界面会旋转。unspecified:由系统选择

2020-12-04 10:17:38 121

原创 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 168

原创 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 120

原创 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 170

原创 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 37 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 17

原创 关于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 771

原创 关于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 292

原创 Android Acitivity状态保存和恢复

问题背景:当前MainActivity添加了四个Fragment分别为AppHomeFrament,AppEditFragment,AppWorksFragment和AppSetupFragment,而在AppSetupFragment中有一个切换夜间模式的功能使用了activity.recreate();导致页面重新创建,并且回到了第一个Fragment(AppWorksFragment)页面,现在需求是需要切换夜间模式之后停留在第四个Fragmnet(AppSetupFragment),因此需要定义一

2020-11-02 16:56:22 59

原创 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 504

原创 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 113

原创 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 118

原创 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 231

原创 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 179

原创 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 71

原创 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 218

原创 Android调用系统设置界面中的功能

一.//根据包名Intent intent = new Intent("/");ComponentName cm = newComponentName(“com.android.settings”,“com.android.settings.Settings$DeviceInfoSettingsActivity”);intent.setComponent(cm);intent.setAction(“android.intent.action.VIEW”);mContext.startActiv

2020-09-15 18:17:05 298

原创 Android模仿引导页面列表自动滑动

private void smooth(RecyclerView data_rv) { MyApplication.getInstance().getHandler().postDelayed(new Runnable() { @Override public void run() { int w = data_rv.getWidth(); data_rv.smoothScro.

2020-09-03 17:34:51 83

原创 Android对View进行截图并且保存

View截图生成bitmp: //方法1 public static Bitmap capture(View view, float width, float height, boolean scroll, Bitmap.Config config) { if (!view.isDrawingCacheEnabled()) { view.setDrawingCacheEnabled(true); } if(width==0){

2020-09-03 17:30:16 304

原创 Android状态栏设置颜色

使用如下类:public class SystemBarTintManager { static { // Android allows a system property to override the presence of the navigation bar. // Used by the emulator. // See https://github.com/android/platform_frameworks_base/blob/ma

2020-09-03 17:19:31 53

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除