Skip to content

Instantly share code, notes, and snippets.

View CMFS's full-sized avatar
🎯
Focusing

Tong Gang CMFS

🎯
Focusing
View GitHub Profile
@CMFS
CMFS / Android-状态保存与恢复.md
Created September 21, 2018 05:07
Android状态保存与恢复

Android状态保存与恢复

Activity

  • 状态保存

    • onSaveInstanceState(Bundle)
    • onSaveInstanceState(Bundle, PersistableBundle)
  • 状态恢复

@CMFS
CMFS / Android-RecyclerView-Inconsistency-detected.md
Created September 20, 2018 06:56
RecyclerView在移除Item时Inconsistency detected异常

RecyclerView的Inconsistency detected异常

配置

  1. RecyclerView.AdaptergetItemId(int)方法直接返回position
  2. RecyclerView.Adapter调用setHasStableIds(true)

操作

当数据量大于GridLayoutManagerspanCount时,删除第一个。

错误信息

@CMFS
CMFS / 避免通过反射来调用Android Framework隐藏API.md
Created July 16, 2018 03:40
[Note] 避免通过反射来调用Android Framework隐藏API

避免通过反射来调用Android Framework隐藏API

  1. 创建一个新的Library Module,然后添加Android Framework的隐藏类及隐藏方法。如ActivityManagerNative
package android.app;

import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
@CMFS
CMFS / ActivityUtils.java
Created July 15, 2018 07:55
判断Activity是否从ADB启动
import android.app.Activity;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.text.TextUtils;
/**
* @author CMFS
*/
public class ActivityUtils {
@CMFS
CMFS / Android的线程间通信与进程间通信的几种方式.md
Created June 8, 2018 05:43
[Note] Android的线程间通信与进程间通信的几种方式

Android的线程间通信与进程间通信的几种方式

线程间通信

  • Android类
    • Handler
    • View.post()
    • Activity.runOnUiThread()
    • AsyncTask
    • BroadcastReceiver
@CMFS
CMFS / OkHttp在服务器主动断开连接时的处理.md
Created June 8, 2018 03:11
[Note] OkHttp在服务器主动断开连接时的处理

OkHttp在服务端主动断开连接时的处理

当服务端主动断开连接时,服务端向客户端发送FIN消息请求断开连接,客户端收到消息后回复ACK消息通知服务端。此时当客户端仍然有消息需要发送时,不同的网络框架处理不一样。如android-async-http会通过socket.sendUrgentData()发送一个字节的数据来判断服务端连接是否正常,如果连接正常才会继续发送;如果连接断开则重新建立连接之后再发送请求。OkHttp则不会进行连接判断,直接发送请求,如果服务端在接收请求后回复RST消息,OkHttp会重新建立连接后再发送请求。

对于服务端来说,

  • android-async-http会多次发送一个字节的数据,此数据对于服务端来说是没有任何作用的。
  • OkHttp由于没有检查连接状态,在服务端主动断开连接时,会发送无效请求,对于服务端来说,就降低了请求成功率。

当使用OkHttp时可以通过设置ConnectionPoolKeep-Alive时间来解决这个问题,默认值为5min。只要配置时间短于服务端对应的时间,就可以保证由客户端主动断开连接,就不会出现无效请求的问题。

@CMFS
CMFS / NestedScrollView嵌套RecyclerView.md
Last active September 2, 2019 07:08
[Note] NestedScrollView嵌套RecyclerView

NestedScrollView嵌套RecyclerView

直接嵌套

主要的关注点是RecyclerViewnestedScrollingEnabled属性值对滚动行为的影响。

NestedScrollView处理滚动

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
@CMFS
CMFS / NestedRecyclerView.kt
Created June 3, 2018 05:29
RecyclerView嵌套RecyclerView同向滚动处理
class NestableRecyclerView : RecyclerView {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle)
init {
requestDisallowInterceptTouchEvent(true)
}
private var prevY: Float = 0F
https://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread
Both processes and threads are independent sequences of execution.
The typical difference is that threads (of the same process) run in a shared memory space,
while processes run in separate memory spaces.

RxJava中map和flatMap区别

  • map操作符是操作流中的数据,而不会改变流对象。
  • flatMap操作符是操作流,所以会改变流对象。
public class MapAndFlatMap {
  public static void main(String[] args) {
    // map returns String
 Single.from("Foo") // Single@0x01("Foo")