- 博客(40)
- 资源 (23)
- 收藏
- 关注
原创 跟窗口操作常用的几个方法
在Android的View.java文件中,有几个方法用于处理窗口和显示相关的操作,它们是 getWindowToken() , getWindowId(), getApplicationWindowToken() 和 getDisplay()。getWindowToken() 方法返回当前View所属的窗口的令牌,可以用于执行与窗口相关的操作,如显示或隐藏窗口。通过使用这些方法,可以获取窗口和显示的信息,并执行相应的操作,例如显示或隐藏窗口,处理多屏幕设备上的显示逻辑等。
2023-11-23 08:49:21
211
原创 Choreographer
在Android框架中,Choreographer(舞台监督)是一个用于管理和协调UI线程上的动画和绘制操作的系统组件。或许我们大概清楚,但不一定能表达清楚。
2023-10-21 12:00:52
454
原创 AndroidStudio使用gradle出现Could not download... 或unable to resolve dependency for...
AndroidStudio使用gradle出现Could not download... 或unable to resolve dependency for...第一步第二步第三步第一步将 gradle.properties 文件 下配置的所有网络代理都注释掉 。 (mac 下通过终端 open .gradle 命令打开 。 windows 下通过 C:\users{user name}.gr...
2020-02-04 17:31:17
2079
原创 String, StringBuffer, StringBuilder
1 String(1) String的创建机理由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象...
2019-06-12 00:49:01
140
原创 强引用、软引用、弱引用、虚引用
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。1 强引用特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回...
2019-06-05 19:17:05
157
原创 final、finally、finalize
1. final修饰类:不可被继承修饰方法:不可重写修饰变量:不可修改,只能约束引用不可以被再次赋值。匿名内部类访问局部变量时需要使用 final,因为 Innerclass 实际会 copy 一份局部变量,final 可以防止出现数据一致性问题2. finally:Java 保证重点代码一定要被执行的机制,try - finally,除非在 finally 前执行了 System.exi...
2019-06-05 18:01:36
135
原创 Exception和Error
Exception和Error都继承了Throwable类,在java中只有Throwable类的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成部分。Exception和Error体现了java平台设计者对不同异常情况的分类,Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error是指在正常情况下,不大可能出现的情况,...
2019-06-05 10:30:58
334
原创 对Java平台的理解
“一次编译、到处运行”说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JDK,安装好JDK后也就有了Java语言的运行环境。其实Java语言本身与其他的编程语言没有特别大的差异,并不是说Java语言可以跨平台,而是在不同的平台都有可以让Java语言运行的环境而已,所以才有了Java一次编译,...
2019-06-04 18:30:57
109
原创 仿微信语音对话实现
要实现下面的布局(先思考下如何实现,看似简单,或许会有所收获) <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.example.weixinrecorder.view.AudioReco...
2018-03-09 09:31:54
1096
原创 IntentService——异步的,会自动停止的服务
服务默认运行在主线程当中,如果要处理耗时操作,就必须开启子线程进行相关逻辑处理。同时,由于服务一旦启动,就会一直处于运行状态,必须调用stopService()或stopSelf()方法才能让服务停止。所以要实现让一个服务在执行完毕后自动停止的功能,在onStartCommand()方法中可以这样写: new Thread(new Runnable() { ...
2018-03-06 17:43:51
2365
原创 前台服务
服务几乎都是在后台运行的,但由于其系统优先级比较低,当系统出现内存不足的情况下,就有可能回收掉正在后台运行的服务。如果希望服务一直保持运行状态,可以考虑使用前台服务。 前台服务跟后台服务最大的区别在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态状态栏后可以看到更加详细的信息,非常类似通知的效果。public class MyService extends Serv...
2018-03-06 16:50:44
243
原创 活动(Activity)和服务(Service)进行通信模板
比如现在想在MyService里提供一个下载功能,然后在活动中可以决定何时开始下载,以及随时查看下载进度。实现这个功能的思路是创建一个专门的Binder对象来对下载功能进行管理。代码如下所示:public class MyService extends Service{ private DownloadBinder mBinder = new DownloadBinder...
2018-03-06 16:01:20
1026
原创 通用网络请求实现之HttpURLConnection和OkHttp
网络请求是一个耗时操作,所以我们需要开启一个子线程来发起网络请求,同时,由于耗时逻辑都是在子线程里进行的,那么服务器响应的数据就无法返回,这时我们应该考虑使用Java的回调机制。public interface HttpCallbackListener{ void onFinish(String response); void onError(Exception e);}...
2018-03-05 18:56:55
3610
原创 json解析的常用方式(不使用第三方库)
解析json数据有很多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON,另外,一些第三方的开源库如Jackson,FastJSON等也非常不错。接下来主要学习前两种解析方式的用法。JSONObjectjson数据:[{"id":"5", "version":"2.1", "name":"c book"}, {"id":&
2018-03-05 17:13:43
2478
1
原创 OkHttp基本使用
添加依赖库 compile 'com.squareup.okhttp3:okhttp:3.4.1' //可以自行修改成最新版本Get请求 OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("http://www.baidu.com") //可以连...
2018-03-05 13:39:48
156
原创 WebView最基本设置使用说明
...WebView webView = (WebView)findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.loadUrl("http://www.baidu.com");.....
2018-03-05 11:48:38
310
原创 android调用摄像头拍照
该功能使用到的场景比较多,下面能过一个实例介绍其使用,布局比较简单只有两个控件,上面Button下面ImageView,Button用于打开摄像头进行拍照,而ImageView用于将拍到的图片显示出来。public class CameraTestActivity extends AppCompatActivity { public static final int TAKE...
2018-03-05 11:12:28
233
原创 android多媒体之播放音视频
播放音频 在Android中播放音频文件一般都是使用MediaPlayer类来实现,它对多种格式的音频文件提供了非常全面的控制方法。常用的控制方法有:setDataSource(), prepare(), start(), pause(), reset()(将MediaPlayer对象重置到刚刚创建的状态), seekTo(), stop()(停止播放音频,调用这个方法后的MediaPlay...
2018-03-03 00:56:36
2137
原创 通知的使用
相比于广播接收器和服务,在活动里创建通知的场景还是比较少的,一般只有当程序进入到后台的时候我们才需要使用通知。但是无论在哪里创建通知,整体的步骤都是相同的。NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 由于几乎Android系统的...
2018-03-02 10:41:52
264
原创 内容提供器(ContentProvider)的安全性
内容提供器是如何做到保证隐私数据不会泄露出去的? 因为内容提供器的良好机制,所有的CRUD操作都一定要匹配到相应的内容URI格式才能进行,而我们当然不可能向UriMatcher中添加隐私数据的URI,所以这部分数据根本无法被外部程序访问到,安全问题也就不存在了。...
2018-03-01 12:52:10
940
原创 程序运行时申请权限
大家都知道,Android6.0系统的新特性是运行时权限,为简单起见,下面以CALL_PHONE这个权限为例来示例如何使用。 CALL_PHONE这个权限是编写拨打电话的功能是需要声明的,因为拨打电话会涉及用户手机的资费问题,因而被列为危险权限。 首先,在清单文件AndroidManifest.xml中添加以下权限声明:<uses-permission android:n...
2018-03-01 03:58:41
419
原创 android创建数据库,表整体流程
实例化SQLiteOpenHelper,调用getWritableDatabase() 或 getReadableDatabase(),当检测到当前程序中还没有创建指定的数据库时,于是会创建数据库并调用SQLiteOpenHelper实例中的onCreate()方法,这个方法中,我们通常会使用SQLiteDatabase调用execSQL来创建数据库表,此时,数据库和表就都创建好了。当检测到要...
2018-02-28 16:06:48
1442
原创 瞬时数据,android中的数据持久化及方式
瞬时数据:指那些存储在内存当中,有可能会因为程序关闭或其它原因导致内存被回收而丢失的数据。 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使手机或电脑关机的情况下,这些数据仍然不会丢失。 保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。 Android系统中主要...
2018-02-28 11:32:39
566
原创 本地广播
首先,我们都知道广播是一种跨进程的通信方式,这一点从应用程序可以接收系统广播就可以看出来。 其次,我们通常发送和接收的广播全部属于系统全局广播,即本程序发出的广播可以被其它任何应用程序接收到,并且本程序也可以接收到来自其它任何应用程序发送的广播。这样很容易引起安全问题,比如说我们发送的携带关键性数据的广播可能会被其它应用程序截获,或者其它的应用程序可能会不停向我们的广播接收器发送垃圾广播...
2018-02-27 16:38:17
438
原创 让一份程序同时适应手机和平板,动态加载布局的技巧
由于平板电脑的屏幕足够大,我们会发现很多应该采用了双页模式即程序在左侧面板上显示一个包含子项的列表,右侧面板显示内容,而手机屏幕一次只能显示一页内容,因此两个页面需要分开显示。 为了让碎片发挥更大的空间,我们可以考虑如何才能让程序根据设备的屏幕大小和分辨率在运行的时候动态加载哪个布局,那就是使用限定符。 比如: 单页模式:res/layout/activity_main,xm...
2018-02-27 10:49:01
819
原创 碎片(Fragment)的状态与附加回调
跟活动一样,碎片在其生命周期内也会经历运行状态,暂停状态,停止状态以及销毁状态这四种状态,下面将分别进行说明。运行状态: 碎片可见并且它所关联的活动正处于运行状态时。暂停状态: 当一个活动进入暂停状态即由于另一个未占满屏幕的活动被添加到栈顶时,与它相关联的可见碎片就会进入暂停状态。停止状态: 当一个活动进入停止状态时,与它相关联的碎片就会进入停止状态。或者通过调用Fra...
2018-02-27 02:22:12
441
原创 活动与碎片之间以及碎片与碎片之间进行通信
活动->碎片DetailFragment fragment = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail_fragment);碎片->活动MainActivity activity = (MainActivity)getActivity();碎片->碎片思路:...
2018-02-27 01:43:57
710
原创 RecyclerView由来及使用模板
为什么要使用RecyclerView ListView由于其强大的功能,直到今天仍有不计其数的程序在使用ListView。但是ListView也有自身的缺陷。比如:如果不使用一些技巧来提升它的运行效率,那么它的运行效率会非常差;ListView的扩展性也不够好,目前只能实现纵向滚动的效果,如果我们有横向滚动的需求,那么ListView就无法实现了。 为此,官方推荐使用一个功能更加强大...
2018-02-26 17:52:40
206
原创 ListView滑动性能优化三步曲
我们将问题定位在ListView的适配器中的getView(int position, View convertView, ViewGroup parent)中: 1. 最初的写法即加载子项布局View,获取View中的控件实例,对各控件实例进行赋值,最后再返回这个View。这样的写法每次都会重复加载布局,运行效率最低。 2. 仔细观察会发现,getView()方法中有一个conv...
2018-02-26 10:46:43
241
原创 LayoutInflater的inflate()方法参数说明
这里以ListView的适配器为例说明,在适配器的getView()方法中,我们在加载ListView的子项布局时,会这样写: View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false); 前两个参数我们已经知道是什么意思了,第三个参数指定成false,表示只让我们在父布局中声明的...
2018-02-26 09:36:24
999
3
原创 左中右结构标题栏实现技巧
标题栏: 两种实现方式: 1. 使用RelativeLayout(这种方式在此不实现) 2. 使用LinearLayout(重点介绍)<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
2018-02-25 01:43:43
871
原创 百分比布局
在常用的布局LinearLayout, RelativeLayout, FrameLayout中,只有LinearLayout支持使用layout_weight属性来实现按比例指定控件大小的功能,其它两种布局都不支持。 为此,Android引入了一种全新的布局方式来解决这个问题——百分比布...
2018-02-25 00:55:04
288
原创 快速判断当前所在活动,快速退出程序
如何知道当前在哪个活动 新建BaseActivity(继承自AppCompatActivity)但不需要注册,在onCreate()方法中写Log.e(“BaseActivity”, getClass().getSimpleName()),最后修改让BaseActivity成为项目中所有活动的基类。如何随时随地退出程序2.1. 编写活动管理器public class Activit...
2018-02-22 19:00:07
163
原创 启动模式之singleTask和singleInstance之间的关联
不同于其它3种启动模式,指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动,其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈。附:如何解决活动实例共享? 每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例,而在singleInstance模式下会有一个单独的返回栈来管理这个活动,不管...
2018-02-22 17:19:58
750
原创 Android Studio快速补全日志及生成TAG
在方法外即定义变(常)量的地方,输入logt,然后按下Tab键,这时就会以当前的类名作为值自动生成一个TAG常量。在方法中输入logd,然后按下Tab键,就会自动补全一条debug级别的日志,其它级别以此类推。...
2018-02-13 05:24:07
6187
原创 android5.0及以上版本特性
android5.0 使用ART运行环境替代了Dalvik虚拟机,大大提升了应用的运行速度,还提出Material Design的概念来优化应用的界面设计。除此之外,还推出Android Wear,Android Auto,Android TV系统,从而进军可穿戴设备,汽车,电视等全新领域。android6.0 加入运行时权限功能android7.0 加入多窗口模式功能...
2018-02-12 18:31:18
433
转载 Android学习路线指南
前言看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行大量的面试才能挑选出一个比较满意的。为什么中高级Android程序员不多呢?这是一个问题,我不好回答,但是我想写一篇文章来描述下Android的学习路线,期望可以帮助更多的
2018-01-29 11:04:22
225
转载 面试笔试综合
01Activity生命周期?这几乎是个老少咸宜,永远不会过时的问题,而且极有可能是第一个问题。这个问题当然没什么好讲的啦,死记硬背是没什么用的了,关键是理解。本人就曾遇到这个问题的变种问题,问onStart(),与onResume()有什么区别?如果面试官抛出这个问题,是不是有点措手不及。今天又听说有同学遭遇了更变态的问题:什么情况下Activity走了onCreat(),而不走onStar
2018-01-26 10:49:16
202
原创 面试笔试1
1.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。 拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中接着调用Looper.loop()不断遍历Message Queue。 Handler的创建依赖与当前线程中的Looper,如果当前线程没有L
2018-01-25 11:10:25
249
Android开发艺术探索之高清版本
2018-02-02
Android源码设计模式解析与实战.PDF(高清完整版)
2017-12-05
android气泡式对话列表
2014-09-14
android4.0.*源码
2014-08-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人