- 博客(58)
- 收藏
- 关注
原创 设计模式-单例模式
设计模式-单例模式介绍定义实例变种饿汉模式懒汉模式DCL单例静态内部类单例枚举型单例总结介绍单例模式可以说是很多开发者解除到的第一个设计模式,当然也可能用到了自己没发觉是设计模式,单例模式的核心思想莫过于创建类的唯一实例,从而避免类的重复创建,达到节约资源开销的目的,从而满足业务上的实际需求。定义确保某个类有且只有一个实例,且只有自己可实例化实例变种饿汉模式这是最浅显的写法,直接上代...
2019-10-16 17:44:39 171
原创 [解决]No toolchains found in the NDK toolchains folder for ABI with prefix
实际上是新版NDK只能适配到3.0以上的gradle,所以除了大动干戈修改gradle到3.0以上之外,只能下载老板的NDK,下载地址下载不了的点击这个备用: 地址PS:发现一个更快的,下载的文件大小就1KB,所以尝试了一下,直接添加toolchains\mips64el-linux-android-4.9\prebuilt\darwin-x86_64这个层级目录就行了...
2019-03-28 17:31:57 174
原创 关于Activity和Fragment的onStart
ON_CREATE, ON_START, ON_RESUME events in this class are dispatched after the LifecycleOwner's related method returns. ON_PAUSE, ON_STOP, ON_DESTROY events in this class are dispatched before the LifecycleOwner's related method is called.作者:TiouLims链接
2019-03-22 11:22:53 1743
原创 面试之Looper
最近面试被问到Looper被存在哪个位置????一脸懵逼。之前只知道Looper是一个循环器,对MessageQueue进行Message的读取操作,再通过Message.taget指向Handler,达成消息送达执行回调的目的。只知其然,不知其所以然,没办法,好好研究代码吧,上代码!Looper我们都知道,在次线程中创建Handler时,都需要调用Looper.parae,否则会抛异常,...
2018-11-14 02:56:01 263
原创 Framgnt懒加载
Framgnt懒加载为了解决当使用viewpager+fragment时,需要预先加载fragment资源,而setUserVisibleHint在每次切换到framgnet时都会调用,且在创建时总是优先于onCreatView调用,所以可以在此方法写一些预加载,而UI相关的需要确认onCreateView调用后才可以加载。public abstract class MyFragment ex...
2018-11-05 13:37:22 171
原创 AS中使用自己编译的jar替换环境jar
由于在实际使用中android源码很多方法都被@hide起来了,无法使用,据说使用反射效率又很慢,于是在eclipse中就很盛行使用自己编译好的jar去替换源码中的jar,已达到能使用@hide方法的目的。现在就来谈谈如何在androidstudio中达到这一目的。 1.classes.jar是我自己编译后的jar文件,先将其放入libs文件夹,之后在app目录下的build.gradle中添加:
2017-07-14 14:31:02 695
原创 Android全屏方法和手动显示navigation
1.全屏 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { if (Build.VERSION.SDK_INT >= Build.VERSION_CO
2017-07-04 17:58:06 784
原创 androidannotations注解配置
1.根目录build文件的classpath classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'2. app目录build apply plugin: 'android-apt' compile 'org.androidannotations:androidannotations-api:4.3.1'
2017-06-14 17:10:43 241
原创 在AndroidStudio中使用gradle构建出现的一些问题
1.版本不一致导致运行出错在做公司项目跟进的时候,发现项目集成了很多moudle,这就导致最后编译出来的工程关于support.的一系列资源的版本不一致,因为有些support.会根据高版本的升级,例如我现在使用的是recyclerView23.4.0的依赖,其中需要使用support-v4的一些工具,可是某个moudle把v4定在的22.2.0,这就导致我使用过程中会 ClassNotFound
2017-06-11 23:35:54 745
原创 AndroidStudio创建library出现的一些问题
1.创建library库的时候,不能使用一系列注解,否则会提示 R文件的id不是常量(attribute value must be constant)2.在library中创建的所有资源(string,color。。。)等不能和主App程序中的重名,不然优先使用App中的资源
2017-06-11 23:16:40 638
原创 AlertDialog无法铺满
最近写dialog发现总是无法铺满,下面贴出解决代码Window window = selWifiDirDialog.getWindow(); WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = WindowManager.Layo
2017-06-11 22:34:41 599
原创 关于service.setPackage和bindService一直返回false
今天在研究AIDL的时候,bindService服务端的service一直返回false,在网上查一直说的什么Context问题,发现跟自己的情况不一样,仔细研究了下,发现一个大坑。 启动service的时候getApplicationContext().startService(new Intent(getApplicationContext(),BookService.class));调试发现
2017-05-10 14:12:36 5791
原创 关于equal和==
最近面试的时候总是遇到这个问题的笔试,以前学的时候没有深究,现在是时候来总结一下了1.基本类型和包装类诸如 new Integer(32)==32 new Integer(32).equal(32) ...此时==比较的就是具体的值,所以在此包装类和基本类型就没有区别,且各包装类和各基本类型可以互等,例:new Integer(32) == 32f;n
2017-05-05 11:27:32 1250
原创 关于canvas.drawBitmap
最近在研究二维码的生成问题时,需要用到canvas.drawBitmap,这个方法有很多重载方法,写下本人的一些见解。1.drawBitmap(Bitmap bitmap, float left, float top, Paint paint)这是很常用的一个方法,参数理解很简单: bitmap:需要绘制的bitmap left:绘制区域与左边界距离 top:绘制区域与上边界距离 paint
2017-05-04 10:58:39 4587
原创 实现shape边框只显示一边(两种方式)
最近做项目需要做个圆形的drawable,当然要用到xml中的shape来实现,实现之后发现边缘化需要设置边框,这个边框又只需要显示在上边,其他地方不要,下图是实现的效果(加了个灰色的边在上边)思路大概是先创建一个灰色的drawable,之后用白色的drawable遮挡,再把白色的drawable下移1dp1.下面是xml实现过程:<?xml version="1.0" encoding="utf-
2016-12-19 17:54:02 10711
原创 关于在在Fragment中Edittext中不显示输入法
最近在做项目的时候,发现在碎片中的Edittext无法显示输入法,试了各种修改清单文件windowSoftInputMode属性以及requestFocus获取焦点之类的问题,后来发现是自己的设置的问题getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);就是因为之前设置了不显示软键盘
2016-12-14 14:21:25 1626
原创 关于Drawable设置到控件中不显示的问题
今天写项目时遇到个很变态的问题,就是关于ColorDrawable不显示.1.在此之前,我们需要先知道Drawable这个类,如果你是在代码中设置进去的话,必须要设置setBound(),就像这样://ResourceUtil.getDra是我的一个工具类.根据版本获取Drawable的Drawable drawble = ResourceUtil.getDra(getContext(),R.dr
2016-12-07 17:29:53 2963
原创 关于反射(一)
首先不得不承认Android是一种不安全的语言,因为不管你设置了什么私有类或者属性、方法我都可以通过近乎无赖的方法–反射获取到。 使用反射获取私有变量,大致分为以下几个步骤。1.获取Field在这之前,我们得先获取class对象,当然这很容易,任何类getClass()就可以了,之后我们可以通过(1).getDeclaredField(String)(获取所有field,包括私有的)(2)getF
2016-11-30 15:05:59 270
原创 让Drawable变色
做项目的时候有时需要根据点击图片切换不同的图片,这就需要美工切几张不同颜色的图,后来发现有办法可以使drawable变色,这样无形减少很多图片所占的空间,而且想要什么颜色都行。 1.需要android.support.v4 中的DrawableCompat类 2.生成所需要的Drawable,我封装成了个类,方便使用public class DrawableTintUtil {
2016-11-23 14:53:12 694
原创 ScheduledExecutorService只执行一段时间
写项目的时候,用了线程池ScheduledExecutorService.scheduleAtFixedRate(...)发现只执行了一次,后来经过仔细查看,发现中Runable任务中发生了异常,所以后面都不执行….
2016-11-15 17:44:48 2737
原创 AndroidStudio修改PackName
做项目的时候,修改了一下packName,就只在AndroidManifest修改了 package的值,结果不行,在允许时获取到的getPackageName()还是原来的,网上搜了半天,一大堆废话,后来自己琢磨,发现在build文件中把applicationId 也修改成同一个就好了。
2016-11-09 12:31:58 1133
原创 View中的ScrollTo和ScrollBy
在让子控件滚动的时候需要用到这两个方法,在这之前我们需要获取到子控件在视图中的位置。 需要用到getX()/getY()和getRawX()/getRawX(),前者是获取在视图中的相对坐标,后者获取的是相对于屏幕左上角的坐标,在例子中我们使用前者. 其中mScrollX、mScrollY表示控件相对于父控件的偏移量,例:子控件在(100,100)位置,那么此时mScrollX和mScrollY
2016-10-28 16:07:34 377
原创 初涉CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout
使用协调者布局(CoordinatorLayout),可以在recyclerView中添加头部,或者在ViewPager等复杂的页面中使滚动的部分与其他区域协调滚动,从而达到一起滚动的效果. 要做到这种效果以上三个空间是必须使用到的而且必须是包裹关系,即从外到内: CoordinatorLayout->你要使用的控件A和AppBarLayout->CollapsingToolbarLayout-
2016-10-27 18:14:59 223
原创 Fresco与Shared Element Transition不兼容
关于这个问题,看了下github上面的评论 链接 之后发现需要使用fresco里面自带的动画来设置就可以了 getWindow().setSharedElementEnterTransition(DraweeTransition.createTransitionSet(ScalingUtils.ScaleType.CENTER_CROP, ScalingUtils.ScaleType.FIT_CE
2016-10-26 11:26:35 1115
原创 Gradle version 2.2 is required错误解决,还有gradle造成的各种错误
Android studio编译项目时出现如下错误:A problem occurred evaluating project ':app'.> Failed to apply plugin [id 'com.android.application'] > Gradle version 2.2 is required. Current version is 2.10. If using th
2016-10-25 15:56:39 12536
原创 在AndroidStudio中添加butterknife插件
1.在整个工程的.gradle的dependencies中添加 classpath: classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:androi...
2016-10-25 11:13:38 2169
原创 浅谈dispatchTouchEvent,onTouch,onTouchEvent,onInterceptTouchEvent
总所周知,Andorid视图只要分成View和ViewGroup,其中ViewGroup继承自View,其中最重要的区别在于View一般指可见的一块区域,没有子视图,而ViewGroup有子视图。 **1.**dispatchTouchEvent表示是否分发事件,向自身 **2.**Touch事件(包含onTouch和onTouchEvent,其中onTouch在onTouchEvent之前,若
2016-07-07 16:27:11 356
原创 Fragmnet为何一定需要空的构造方法
写项目的时候如果需要对碎片的构造方法传入参数(即创建一个有参的构造方法),此时会飘红Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead...大概意思就是避免创建有参的构造方法,推荐使用无参的构造方法,那么这是为什么呢? 在网
2016-06-02 10:14:14 494
原创 使用RecyclerView.adapter.notifyDataSetchang()不能更新数据
如题,在做项目中遇到这个问题,暂时不能解答为何,解决方法是 在Adapter中重写getItemType(),在数据发生变化时,同时改变对应的ItemType,再使用局部更新(不懂baidu),这时旧会重新调用onCreateViewHolder 和对应的bind方法,达到更新数据和视图的目的。
2016-05-31 10:30:13 4246
原创 IO流
**1.**IO流分为字节流和字符流,字节流的父类为InputStrem,OutputStream,字符流为Reader和Writer。 2.字节流处理单元为1个字节,字符流处理单元为2个字节的Unicode字节。字符流对多国语言的支持性较好,对于音频、文件、图片使用字节流较好,对文本贴别是中文使用字符流较好。因为文件存储都是一个一个字节的存取,所以推荐使用字节流读取和写入,不用像使用字符流需要转
2015-11-11 23:55:08 241
原创 Activity四种启动模式
standard:标准加载模式,在栈中只要接受到Intent,那么activity就会创建。 singleTop:如果接受到请求时该activity在栈顶,那么不会创建,直接调用该activity,否则在栈顶创建。 singleTask:两种情况,有两个activity A和B,B为singleTask 。1:当在同一个app中时,A启动B不会创建新的Task,B位于A之上。2.当不在同一个AP
2015-11-11 22:12:00 409
原创 抽象类和接口
1.抽象类中可以有实现的方法也可以有抽象方法,而接口中只能有抽象方法。 2.抽象类可有自己的成员变量,但接口只能有static final定义的变量。 3.抽象类的优点:例如在想在继承的抽象类的类中加入某个方法时,只需要在抽象类中加入并实现该方法,子类就会自动获得该方法。而接口如果你想在实现接口的类中同意添加某个方法时,不只需要在接口中定义该方法,还要在每个实现该接口的类中实现该方法。 4.接
2015-11-11 10:23:08 218
原创 在android中使用自定义组件
首先你要有一个实体类继承了view(或其子类)package com.phc.act.view;import android.widget.LinearLayout;public class LocationView extends LinearLayout implements BDLocationListener ,View.OnClickListener{ public Locatio
2015-11-04 23:14:46 484
转载 线程池
线程池的由来线程池是线程管理的地方,因为线程的创建和回收很浪费系统资源,而线程池为线程生命周期开销问题和资源不足问题提供了解决方案。 1.因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快 2.通过适当地调整线程池中的线程数目,也就是当请求的数目超过某个阈值时,就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从而可以
2015-11-04 12:32:22 205
原创 基于RecyclerView实现ViewPager的功能(横向)
说下大概思想吧,RecyclerView的使用大家都很熟悉了(不熟悉的请自行百度),在做项目的时候,需要实现一个图片界面横向滑动的功能,之前用RecycleView时一直做的都是垂直滑动的,当然使用ViewPager可以轻易完成。然而我就是想用RecycleView完成((⊙﹏⊙)程序员死磕病又犯了)。1.首先item文件,因为需要,每个Item都是宽度与屏幕等长,要在代码中实现,不然图片宽度会不一
2015-11-03 18:11:17 9848 3
原创 2015-10-28
在Adapter 数据的更新一般来说用notifyDataSetChanged()方法通知适配器数据发生变化,更新view,后来发现另一个真正的 “更新”方法:public void setAdapter(ListAdapter adapter) { //清空之前绑定的mDataSetObserver对象 if (mAdapter != null && mDataSe
2015-10-28 21:22:44 297
原创 2015-10-23
ContentProvider当一个应用调用另外一个应用的Provider时,要在创建ContentProvider的应用的provider注册中加入 权限 android:exported=”true”TCP/UDPTCP服务端:绑定端口号 ,开始接受数据ServerSocket serverSocket =new ServerSocket(port);socket =serverSocket.
2015-10-23 18:32:26 313
原创 2015-10-17
关于java的值传递public class Example{ String str=new String("good"); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch);
2015-10-17 17:05:58 764 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人