
java
文章平均质量分 53
Stride.Xue
这个作者很懒,什么都没留下…
展开
-
Android setTheme设置透明主题无效
android原创 2022-12-06 10:58:07 · 1884 阅读 · 1 评论 -
Android面试题记录2022
Android高级工程师面试题原创 2022-06-01 20:51:46 · 341 阅读 · 0 评论 -
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 · 399 阅读 · 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 · 325 阅读 · 0 评论 -
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 · 175 阅读 · 0 评论 -
线程相关方法:sleep yeild join
Thread方法Join()方法Thread的非静态方法join()让一个线程等待另外一个线程完成才继续执行。如果线程A执行体中调用B线程的join()方法,则A线程将会被阻塞,直到B线程执行完为止,A才能得以继续执行。**Sleep() 方法:**不会释放锁Sleep——让当前正在执行的线程先暂停一定的时间,并进入阻塞状态。在其睡眠的时间段内,该线程由于不是处于就绪状态,因此不会得到执行的机会。即使此时系统中没有任何其他可执行的线程,处于sleep()中的线程也不会执行。因此sleep()方法常用原创 2021-04-10 16:38:17 · 186 阅读 · 0 评论 -
java移位运算符详解
首先要了解java负数的二进制表示:计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”反码:原码按位取反补码:反码+1移码:移码(又叫增码)是符号位取反的补码对于负数而言,是以补码的形式存储在内存中的。以-7(int)为例第一步:将-7的绝对值转化为二进制 0000 0111第二步:将上面的二进制以反码表示 1111 1000第三步:转化为补码:111111111111111111111111111原创 2021-04-09 15:48:36 · 794 阅读 · 1 评论 -
Android事件分发方法概述
dispatchTouchEventreturn true:表示该View内部消化掉了所有事件return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费return super.dispatchTouchEvent(ev):默认事件将分发给本层的事件拦截onInterceptTouchEvent方法进行处理onInterceptTouchEventreturn true:表示将事件进行拦截,并将拦截到的事件交由本层控件的onTouchEvent进原创 2021-03-30 16:42:22 · 125 阅读 · 0 评论 -
Android开发问题记录
2021.3.13原创 2021-03-13 15:19:39 · 113 阅读 · 0 评论 -
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 · 692 阅读 · 0 评论 -
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 · 679 阅读 · 0 评论 -
JAVA 堆栈 堆 方法区 解析
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配。字符串常量在转载 2021-03-12 15:02:22 · 379 阅读 · 0 评论 -
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 · 433 阅读 · 0 评论 -
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 · 915 阅读 · 0 评论 -
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 · 210 阅读 · 0 评论 -
Android Activity中screenOrientation各值的意义
landscape:限制界面为横屏,旋转屏幕也不会改变当前状态。portrait:限制界面为竖屏,旋转屏幕也不会改变当前状态。sensor:根据传感器定位方向,旋转手机90度,180,270,360,界面都会发生变化。sensorLandscape:(横屏的旋转,不会出现竖屏的现象)根据传感器定位方向,旋转手机180度界面旋转。一般横屏游戏会是这个属性。sensorPortrait:(竖屏的旋转,不会出现横屏的现象)根据传感器定位方向,旋转手机180度界面会旋转。unspecified:由系统选择原创 2020-12-04 10:17:38 · 713 阅读 · 0 评论 -
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 · 839 阅读 · 0 评论 -
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 · 345 阅读 · 0 评论 -
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 · 1658 阅读 · 0 评论 -
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 · 217 阅读 · 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 · 97 阅读 · 0 评论 -
关于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 · 3688 阅读 · 0 评论 -
关于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 · 1630 阅读 · 0 评论 -
关于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 · 1386 阅读 · 0 评论 -
Android Acitivity状态保存和恢复
问题背景:当前MainActivity添加了四个Fragment分别为AppHomeFrament,AppEditFragment,AppWorksFragment和AppSetupFragment,而在AppSetupFragment中有一个切换夜间模式的功能使用了activity.recreate();导致页面重新创建,并且回到了第一个Fragment(AppWorksFragment)页面,现在需求是需要切换夜间模式之后停留在第四个Fragmnet(AppSetupFragment),因此需要定义一原创 2020-11-02 16:56:22 · 283 阅读 · 0 评论 -
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 · 1932 阅读 · 0 评论 -
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 · 797 阅读 · 0 评论 -
Android线程池ThreadPoolExecutor使用
1、ExecutorService,它是一个接口,其实如果要从真正意义上来说,它可以叫做线程池的服务,因为它提供了众多接口api来控制线程池中的线程,而真正意义上的线程池就是:ThreadPoolExecutor,它实现了ExecutorService接口,并封装了一系列的api使得它具有线程池的特性,其中包括工作队列、核心线程数、最大线程数等。ThreadPoolExecutor,我们要创建一个线程池只需要new ThreadPoolExecutor(…);就可以创建一个线程池。直接使用线程的弊端:原创 2020-10-24 12:08:49 · 770 阅读 · 0 评论 -
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 · 826 阅读 · 0 评论 -
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 · 551 阅读 · 0 评论 -
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 · 986 阅读 · 0 评论 -
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 · 335 阅读 · 0 评论 -
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 · 1373 阅读 · 0 评论 -
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 · 1396 阅读 · 1 评论 -
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 · 281 阅读 · 0 评论 -
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 · 1256 阅读 · 0 评论 -
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 · 172 阅读 · 0 评论 -
Android状态栏以及导航栏设置
使用依赖:implementation ‘com.gyf.barlibrary:barlibrary:2.2.8’ public static void initBar(Context context){ // 沉浸状态栏 ImmersionBar.with((Activity) context) .fitsSystemWindows(true) .statusBarColor(R.color.colorPr原创 2020-09-03 17:15:55 · 886 阅读 · 0 评论 -
Recyclerview嵌套Recyclerview滑动冲突解决
以GridLayoutManager 为示例,在子Recyclerview中设置如下方法:GridLayoutManager manager = new GridLayoutManager(mContext, 4); manager.setSmoothScrollbarEnabled(true); rv.setHasFixedSize(true); rv.setNestedScrollingEnabled(false);...原创 2020-09-02 16:48:16 · 728 阅读 · 1 评论 -
Android中Scrollview嵌套Recyclerview解决滑动冲突
1.自定义LayoutMannager:public class ScrollGridViewLayoutManager extends GridLayoutManager { private boolean isScrollEnable = true; public ScrollGridViewLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {原创 2020-09-02 16:45:39 · 1015 阅读 · 0 评论