android开发
文章平均质量分 50
lqpgjv
这个作者很懒,什么都没留下…
展开
-
如何让多个线程顺序执行
先说一下为什么会有这样的要求,如果是简单的要求按顺序执行代码,直接一行行写下来就行了。但是接口调用我们一般都放在工作线程里面,而且有时候需要拿一个接口返回的参数去请求另一个接口,这就需要控制线程按某种顺序执行。方法1:join()public class A1 extends Thread { @Override public void run() { try { System.out.println("--- thread A1 start --原创 2021-04-19 18:28:19 · 280 阅读 · 0 评论 -
Service 的两种启动方式和「Service 与 Activity 数据交互」
1. Service 的两种启动方式Activity 中可以有两种方式启动 Service,不同方式启动时 Service 的生命周期也不一样,现在在 Activity 中定义四个 Button,分别是 startService、stopService、bindService、unbindService,Service 中各生命周期中分别打印 Log 日志,通过日志查看生命周期执行情况:// ...原创 2020-04-24 10:12:03 · 581 阅读 · 0 评论 -
Handler 消息机制以及内存泄漏
1. 消息机制1.1 post系列通过查看源码可知,post(Runnable r)、postDelayed(Runnable r, long delayMillis)最终调用的都是sendMessageDelayed方法:// post public final boolean post(Runnable r){ return sendMessageDelayed(getPost...原创 2020-04-05 23:25:14 · 210 阅读 · 0 评论 -
Handler 中的 handleMessage 所在线程是由什么决定的?
大多数情况下,handleMessage所在线程和 handler 初始化所在的线程相同,但 handler 初始化的时候可以传入一个 Looper 对象,此时handleMessage所在线程和参数looper所在线程相同。1. 含参构造public Handler(Looper looper)class MainActivity : AppCompatActivity() { va...原创 2020-03-30 17:08:43 · 964 阅读 · 0 评论 -
RxJava2和Retrofit2配合使用详解
不讲 rxjava 和 retrofit 而是直接上手 2 了,因为 2 封装的更好用的更多。1. 观察者模式常见的 button 点击事件为例,button 是被观察者,listener 是观察者,setOnClickListener 过程是订阅,有了订阅关系后在 button 被点击的时候,监听者 listener 就可以响应事件。这里的button.setOnClickListener...原创 2019-09-29 14:12:59 · 912 阅读 · 0 评论 -
Dagger2 中的 Binds、IntoSet、IntoMap
1.@Binds使用@Inject初始化对象时有一种特殊情况:需要初始化的是接口的实例,这时候需要特殊处理一下,就需要用到@Binds@Moduleinterface IMainViewModule { @Binds abstract fun provideIMainView(main: IMainViewImpl): IMainView}这里使用 provideXXX...原创 2019-05-30 16:53:59 · 3546 阅读 · 2 评论 -
Android 水印相机开发
水印相机是自定义相机的一种,实现方法有很多,我看了很多别人的做的很漂亮,我做的就很普通了,不过总算是实现了拍照加水印的功能。我这边用到了SurfaceView,有人没用这个也做出来水印相机,个人觉得还是SurfaceView更方便一点(不接受反驳)。先看看效果:原图太大,我做了压缩,所以动图显得模糊。第一步,我们想一进入就打开相机预览,这个怎么做呢?相机功能由android.hardw...原创 2019-03-08 16:57:46 · 3952 阅读 · 4 评论 -
Dagger2 中使用 AndroidInjection 优化注入流程
每个 Activity 如果都需要手动inject(this)有点繁琐,com.google.dagger:dagger-android中包含AndroidInjection类可以优化注册。1.在 BaseActivity 中注册abstract class BaseActivity:AppCompatActivity() { override fun onCreate(savedIn...原创 2019-01-11 14:57:46 · 2841 阅读 · 0 评论 -
AndroidStudio 和 EclipseADT 创建项目时的 aidl 通信
Eclipse 用的人不多,在使用 aidl 实现进程间通信的时候,studio 和 eclipse 还是有点儿区别的。比如现在我们要实现一个求和功能,client 只负责输入,service 负责计算功能。client 界面:1.使用 Eclipse 编写 Service 代码service 目录结构:Calculate.aidl:package com.demo.aidl;i...原创 2018-12-29 17:34:44 · 404 阅读 · 0 评论 -
线形布局下的layout_weight(比重)属性
在布局文件中设置layout_weight(比重)属性时,以宽为例,假如 android:layout_width="wrap_content",或者 android:layout_width="0dp",此时,设置的layout_weight属性和数值成正比;假如 android:layout_width="match_parent",此时,设置的layout_weight属性和数值成反比。具...原创 2018-11-22 09:42:27 · 1131 阅读 · 0 评论 -
Dagger2 中的 Qualifier
Dagger2 中创建实例对象有两种方式:Inject 维度:通过用 Inject 注解构造函数Module 维度:通过工厂模式的 Module 创建其中,Module 的优先级比 Inject 高。基于同样维度的不同实例,比如@Inject A(){}和@Inject A(B b){},系统就会抱错,这种情况叫做依赖注入迷失。Qualifier限定符 就是解决依赖注入迷失的。1....原创 2018-11-16 15:43:41 · 509 阅读 · 0 评论 -
Dagger2 中的 SubComponent
两个 Component 之间除了 dependencies 依赖方式以外,还可以使用 SubComponent 方式。比如说 SeeComponent 想要依赖 AnimalComponent,我们可以这样操作:第一步,在 SeeComponent 中使用@SubComponent注解:@Subcomponentinterface SeeComponent { fun inject...原创 2018-11-20 16:05:28 · 537 阅读 · 0 评论 -
Dagger2 中的 Scope、dependencies
Scope中文意思是范围,Dagger2 中的@Singleton是 Scope 的一种默认实现,点进去可以看到:@Scope@Documented@Retention(RUNTIME)public @interface Singleton {}上面是 Java 方式,如果我们自定义一个 Scope 就很简单了(kotlin 语言):@Documented@Scope@Reten...原创 2018-11-20 16:04:42 · 525 阅读 · 0 评论 -
安卓原生和 H5 交互
1.安卓调用 H5 的方法:mWebView.loadUrl("javascript:webViewNotice(" + "'" + messageNum + "'" + ")");其中,webViewNotice 是方法名,messageNum 是原生传给 H5 的参数。安全起见,mWebView 最好判空一下。2.H5调用安卓原生的方法:WebSettings se...原创 2018-07-17 16:11:40 · 531 阅读 · 0 评论 -
两种方式处理ViewPager点击事件
我们知道,ViewPager 没有点击事件,许多时候,需要设置点击事件,比如轮询广告点击事件,这时候怎么处理呢?我总结了两种方式:对 ViewPager 的每个页面设置点击事件通过onTouch()方法处理下面分别说明一下:(一)对 ViewPager 的每个页面设置点击事件比如这种广告轮询,如果想要点击进入,就要给详情页面传入一个id,详情页通过网址+id(比如www.xxxxx/id)访问原创 2017-03-21 18:43:28 · 25339 阅读 · 1 评论