【笔记记录】2020-05-15

【安卓】

1.Android系统在应用程序框架中定义了三个Java日志写入接口:它们各自是android.util.Log、android.util.Slog和android.util.EventLog,写入的日志记录类型分别为main、system和events,其中Slog类加了@hide标签。

2.Comparable:所有可以 “排序” 的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法。

3.WebViewClient:辅助WebView处理各种事件、通知

4.SharedPreference中putStringSet()不更新:getStringSet()获得的对象不能用于putStringSet(),new一个HashSet集合对象复制原集合,再传递给putStringSet()

5.Hook技术实现Activity插件化:Hook IActivityManager实现(根Activity启动流程、普通Actvity启动流程)

6.开启DataBinding:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
 <data>
   <variable name="user" type="com.example.User"/>
 </data>
<LinearLayout
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@{user.firstName}"/>
   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@{user.lastName}"/>
 </LinearLayout>
</layout>

public class User {
     private String firstName;
     private String lastName;

     public User(String firstName, String lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
    }

    public String getFirstName() {
       return this.firstName;
    }

    public String getLastName() {
       return this.lastName;
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   User user = new User("Test", "User");
   binding.setUser(user);
}

7. AsyncListUtil:AsyncListUtil 是一个用来异步加载数据的类,适合用来从磁盘加载数据的情况(比如读取数据库、读取文件等),而不适合从网络获取数据的情况(因为我们的接口一般不知道总条数)。

8.OkHttp提交JSON:

val json= JSONObject()
try {
    json.put("keyword", "txt")
    json.put("startPage", "1")
    json.put("pageSize", "100")
} catch (e: JSONException) {
    e.printStackTrace()
}

val body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json.toString())

var request:Request  = new Request.Builder()
      .url(url)
      .post(body)
      .build();

Response response = okHttpClient.newCall(request).execute();

9.ImageView 高度自适应

@Override  
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){  
    Drawable d = getDrawable();  

    if(d!=null){  
        int width = MeasureSpec.getSize(widthMeasureSpec);  
        int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());  
        setMeasuredDimension(width, height);  
    }else{  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
    }  
}  

【IOS】

1.UIViewController:title:NSString、navigationItem:UINavigationItem、navigationController:UINavigationControler

2.KeyWindow:

2.1 [UIApplication sharedApplication].delegate.window
2.2 [UIApplication sharedApplication].keyWindow

【英语】

1.Ripple effect in Android

Whenever the user clicks or touches any UI element like, a button, it is desirable to provide some kind of visual confirmation, 
so that the user knows that their touch or click was successful.
Responsive interaction encourages deeper exploration of an app by creating timely, logical, and delightful screen reactions to the user input.

【前端】

1.[Flutter] Offstage:Offstage的作用十分简单,通过一个`offstage`布尔参数来控制 child 是否显示。

2.[小程序] 运行环境:小程序的渲染层和逻辑层分别由 2 个线程管理,页面的数据通过逻辑层通过Native传递到渲染层(小程序的逻辑JS代码都是在逻辑层线程执行)(小程序的页面模板实际上会编译为JS页面代码)。

3.[CSS] table-layout:设置表格的布局算法,单元格的width会有不同的特性。

4.[Flutter] Stack:帧布局

Stack({
  Key key,
  this.alignment = AlignmentDirectional.topStart,
  this.textDirection,
  this.fit = StackFit.loose,
  this.overflow = Overflow.clip,
  List<Widget> children = const <Widget>[],
})

5.[Flutter] Expanded:类似LinearLayout的weight作用

class Expanded extends Flexible {
  const Expanded({
    Key key,
    int flex = 1,
    @required Widget child,
  }) : super(key: key, flex: flex, fit: FlexFit.tight, child: child);
}

6.Arguments: Javascrip 中每个函数都会有一个 Arguments 对象实例 arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素,arguments.length为函数实参个数,arguments.callee引用函数自身。

7.table单元格边框:border-collapse,collapse:合并边框模型、separate:独立边框模型

8.[Flutter] BackdropFilter:只模糊他底下的Widget,自身child参数不参与模糊,所以一般配搭Stack使用。

【后端】

1.explode():

var_dump(explode(" ", "Hello Wor ld", 1));
array(1) { [0]=> string(12) "Hello Wor ld" }

var_dump(explode(" ", "Hello Wor ld", 2));
array(2) { [0]=> string(5) "Hello" [1]=> string(6) "Wor ld" }

2.Java远程调试:java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000,onthrow=java.io.IOException,launch=/sbin/echo -jar test.jar

3.[PHP] password_get_info():获取password_hash()的加密信息。

【其他】

1. java-native-access/jna:JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。

// C++  需要在 vs 中编译成 dll
int max(int num1, int num2) {
    return num1 > num2 ? num1 : num2;
}

// java
public interface JnaLibrary extends Library {
    // JNA 为 dll 名称
    JnaLibrary INSTANCE = Native.load("JNA", JnaLibrary.class);
    int max(int a, int b);
}

// 调用
public static void main(String[] args) {
    int max = JnaLibrary.INSTANCE.max(100, 200);
    System.out.println(max);
}

猜你喜欢

转载自www.cnblogs.com/nicojerry/p/12881886.html