Git Product home page Git Product logo

linghp.github.io's People

Contributors

bitdeli-chef avatar linghp avatar zhaoda avatar

Watchers

 avatar  avatar

linghp.github.io's Issues

rxjava2

1. 阻碍链式的整个流程

比如存储数据,可以用:

 observableForGetWeatherFromNetWork = observableForGetWeatherFromNetWork
            .doOnNext(new Action1<Weather>() {
                @Override
                public void call(Weather weather) {
                    Schedulers.io().createWorker().schedule(() -> {
                        try {
                            weatherDao.insertOrUpdateWeather(weather);
                        } catch (SQLException e) {
                            throw Exceptions.propagate(e);
                        }
                    });
                }
            });

随笔

1.github:Two-factor recovery codes

46877-47c47
2a1a3-4b7e9
a6b86-f426a
83cbd-feb39
d97a6-36468
c3b11-3f5ed
f8ccb-a4d70
61d0e-9d45f
88f2c-fc9c8
05339-5500b
a049b-c933e
09f63-1e710
96d8d-8c5be
a63b8-7a40b
62edc-5c41d
3c1ff-3c477

2.oracle 饶过码

1.368170387382
2.634023475123
3.337313205011
4.301415101203
5.394707816958

反编译

查看当前Activity信息:
1、通过如下命令你可以快速的定位到当前页面所对应的Activity:
adb shell dumpsys activity top
2.jadx- Dex to Java decompiler

解析

1、实现一个 Json 解析器(可以通过正则提高速度)

String json = "{name:"jason",father:"jason",age:18}";
//name:"jason"
//age:18
//"\w+" 字符串属性
Pattern p = Pattern.compile("\w+:("\w+"|\d*)");
Matcher m = p.matcher(json);
while(m.find()){
String text = m.group();
int dotPos= text.indexOf(":");
String key = text.substring(0, dotPos);
String value = text.substring(dotPos+1, text.length());
//替换字符串的开始结束的双引号
value = value.replaceAll("^\"|\"$", "");
System.out.println(key);
System.out.println(value);
}

2、moshi

tips1

  private static final JsonAdapter<List<Contributor>> CONTRIBUTORS_JSON_ADAPTER = MOSHI.adapter(
      Types.newParameterizedType(List.class, Contributor.class));

  ResponseBody body = response.body();
      List<Contributor> contributors = CONTRIBUTORS_JSON_ADAPTER.fromJson(body.source());

Android 路由 及编译时注解

分析来源https://zhuanlan.zhihu.com/p/24116682

不用注解

基本原理:注册时通过hashmap保存每个跳转的协议和对应的类,跳转时通过协议名来找对应的类,达到模块化,解耦。

通过自定义注解

自定义一些注解,自己写注解处理器,注解需要处理的地方,编译时注解处理器会遍历所有代码拿到注解的元素,收集信息,进一步获取类,方法,属性等,然后去拼装类,处理自己要解决的操作。最后提供api供别人调用,这时是通过反射(运行时)实现。
参考http://blog.csdn.net/lmj623565791/article/details/51931859

车机笔记

adb shell pm uninstall --user 0 com.tencent.wecarspeech

adb logcat -v time>D:log.txt

pm path com.tencent.wecarcontrol

am start com.tinnove.wecarspeech/.app.MainActivity
adb shell am force-stop com.tencent.wecarspeech 重启语音进程

adb shell dumpsys package com.tencent.wecarcontrol
adb shell dumpsys package com.mengbo.electronicmanual 查看某个包的具体信息

adb shell pm list packages 列出所有的包名

adb获取当前顶层窗体信息
adb shell dumpsys window | findstr mCurrentFocus

adb push C:\Users\WTCL\Desktop\WT_WeCarControl.apk /system/app/WT_WeCarControl/
WT_WeCarControl.apk

adb shell验证密码取消
adb shell disable-verify 1

adb root 报错:adb shell setenforce 0;adb root;adb remount

查看文件大小 du -h -d 1

adb shell am broadcast -a com.wt.wecarspeech.smartdebugger.excel.Action_Excel -n com.tencent.wecarspeech/com.wt.wecarspeech.smartdebugger.excel.ExcelReceiver

adb shell setenforce 0 解决adbd cannot run as root in selinux enable

adb shell dumpsys package com.tinnove.wecarspeech 查看权限

adb shell ps -A | findstr speech 查看进程

adb shell settings get global TUID

设置logcat缓存
adb logcat -c
adb logcat -g
adb logcat -G 4M

查看文件大小,删除大的文件
du -m
cd Android/data/com.tinnove.wecarspeech/files/tinnove/wecarspeech/wav
rm -rf *

./gradlew :app:dependencies > log.txt

stock

1.相关公司

北斗相关公司:北斗星通、海格通信、华测导航、振芯科技、合众思壮、华力创通、中海达。

合肥长鑫是目前国内唯一使用主流制程的DRAM厂商
存储器(DRAM53%,NAND42%,NOR3%)是芯片中占比最大的细分领域,占比高达30%,全球市场规模达到1300亿美元,但是之前我国在存储器领域,几乎一片空白:
DRAM存储器,三星、SK海力士、美光三足鼎立,合计占有95%的市场份额;
NAND存储器,上述三巨头加上东芝、西部数据,五家合计占有97%的市场份额;
NOR存储器,开始出现兆易创新等国内厂商的身影,但是基本依然由国际巨头垄断,尤其是高端领域。
合肥长鑫是目前国内唯一使用主流制程的DRAM厂商,这次的DRAM项目分为三期,总投资月1500亿,产值规模超过2000亿。
与合肥长鑫直接相关的公司:兆易创新、北方华创、通富微电、至纯科技。
其次是A股中有涉及存储器的公司:兆易创新、紫光国微、全志科技、上海贝岭。
【紫光国微】长江存储将在今年年底量产64层堆栈的3D NAND存储器,在明年生产128层堆栈的3D NAND,进入国际一流梯队。长江存储实际控制人是紫光集团,而紫光国微也是紫光集团旗下做芯片、存储器的平台,所以长江存储一直有注入紫光国微的预期。
细心的研粉会发现,近期芯片投产的消息很多,除了上述提到的合肥长鑫、长江存储,还有:
1)广州粤芯半导体项目将于9月投产(这是今天智光电气涨停的原因);
2)华虹半导体无锡项目将于9月投产;
3)中芯南方计划也即将投产。
产线集中投产,卖铲子的芯片生产设备公司将直接受益。
相关公司:北方华创、长川科技等。

对标美国Wintel,国内PK体系联盟主要参与者:
【主导】飞腾、麒麟;(**长城、**软件)
【数据库】达梦、神通、金仓、南大通用;
【中间件】东方通、中创、金蝶;
【信息安全】北信源、启明星辰、天融信;
【软件】金山软件、永中office、搜狗、金蝶ERP、奇虎360;
【下游用户】国家机关、部分大学、中石油、**联通等。

华为产业链公司:
【芯片】兆易创新、长电科技、闻泰科技、圣邦股份、紫光国微;
【光学系统】韦尔股份、欧菲光、联创电子;
【天线、射频】在Mate 30中,天线、射频价值量至少比普通5G手机提高100%,公司有硕贝德、信维通信、卓胜微、立讯精密、电连技术;
【电池、无线充电】欣旺达、德赛电池、圣邦股份;
【主板PCB、FPC】鹏鼎控股、东山精密、景旺电子;
【屏幕及屏幕系统】京东方A、TCL、蓝思科技;
【人脸识别、屏下指纹】汇顶科技。

此次QLED 4K高清大屏是亮点,华为产业链公司有:TCL集团、激智科技、京东方A、万顺新材。

华为的退出使得国内服务器市场格局大变。
国内服务器市场格局是这样的:浪潮信息市场份额27%、华为15%、华三(紫光股份)12%、中科曙光11%、其他35%(包括**长城、澜起科技、高鸿控股等)。

2.仓位管理三原则

1“买在分歧,卖在一致”,也就意味着在板块大涨之时,宜兑现小部分仓位来实现控仓,从而打低整体持仓成本;
2不断去弱留强,不断通过兑现趋势走弱的仓位来实现控仓,对于高景气赛道,为了避免受大盘影响导致轻易被洗,可以放宽容忍度,板块跌破5日线再彻底清仓。;
3要根据自个可控内的风险偏好,及时处理掉处在盈亏平衡线上的股,来确保本金尽量不被侵蚀(这个提醒永不过时)。

分仓有两大好处:
1、避免踩到黑天鹅的风险:毕竟A股市场波云诡谲,很难说不可能踩到黑天鹅,但是通过分仓操作就旧能够很好规避这个重仓遭受黑天鹅的巨大悲痛。
2、“分仓”和“去弱留强”,是一个完整的交易体系,通过斩断掉队的股,卸掉部分仓位,就能从容坦然地享受板块后面的涨幅,这就是“仓位管理三原则”中的第二原则。

关于风控,今天再补充一下,可以定个总纲领——忽略-5%之内的波动,但是每个人可以根据自个的风险偏好来调节具体是-2%还是-5%,这样就能避免逻辑品种偶或挖黄金坑洗人的不可控因素。

严正强调一下,大伙把下面这句话打印出来并贴在电脑上:大跌之后开启的周期才是是庄稼人战法的精准适用场景,在此情景中大伙可以大仓位参与,除此之外都不是标准的庄稼人战法,大伙小仓位博弈,保持手感即可。

android 线程间通信

1. handler机制

Android中通过Handler机制来异步处理多线程间的通信就是多个线程间共享一个MessageQueue,工作线程将消息发送到MessageQueue,然后UI线程或其他工作线程在MessageQueue在取出消息,进行相应的处理。链接

2.eventbus

EventBus中线程切换是自动用Handler做了处理。参考1 参考2

Android版本兼容

android7.0(24)

不能直接获取sd文件,需通过FileProvider获取uri

Android8.0(26)

1.未知来源应用权限默认被关掉,需要在manifest添加REQUEST_INSTALL_PACKAGES权限 参考

2.通知的通道id和名字是必须的 参考

工具

网页不能复制解决

打开edge浏览器,输入read:+网址,进入阅读模式。

js

一 数据类型

1.JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值,本教程不涉及。)

数值(number):整数和小数(比如1和3.14)。
字符串(string):文本(比如Hello World)。
布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)。
undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值。
null:表示空值,即此处的值为空。
对象(object):各种值组成的集合。

对象是最复杂的数据类型,又可以分成三个子类型。
狭义的对象(object)
数组(array)
函数(function)

2.null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

3.判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。

function myIsNaN(value) {
  return value !== value;
}

4.破解csdn不能复制 链接

document.querySelectorAll("code").forEach(function(item) {
    item.style = item.style + ";user-select: text !important;";
    return item;
})

webview

shouldOverrideUrlLoading

当你点击一个页面中一个链接时会经过shouldOverrideUrlLoading。return true时,你可以自己来处理这个url,webview则不再处理这个url;return false时,webview来处理这个url。
通俗的说,当返回true时,你点任何链接都是失效的,需要你自己跳转。return false时webview会自己跳转。

上传图片

通过h5上传

适配Android10:创建图片地址uri,用于保存拍照后的照片 Android 10以后使用这种方法

    private Uri createImageUri() {
        String status = Environment.getExternalStorageState();
        // 判断是否有SD卡,优先使用SD卡存储,当没有SD卡时使用手机存储
        if (status.equals(Environment.MEDIA_MOUNTED)) {
           return getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
        } else {
            return getContentResolver().insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, new ContentValues());
        }
    }

WebView的shouldOverrideUrlLoading的调用时机

当我们点击页面中的一个link时,先调用shouldOverrideUrlLoading再调用onPageStarted。
当我们通过loadUrl的方式加载一个页面时,先调用onPageStarted再调用shouldOverrideUrlLoading。
不过shouldOverrideUrlLoading不一定每次都被调用,只有需要的时候才会被调用。
比如,一开始页面加载时(没有重定向)不调用,reload不调用,返回上一页面不调用。

调试

1.使用Chrome 浏览器调试移动端网页 chrome://inspect/#devices

git

git的*操作:

1.git rollback

  1. git log --pretty=oneline
  2. git reset --hard HEAD^ //reset latest commit
  3. git reset --hard commitid(latest commit) //restore last step
  4. git reflog //view history command

2.git add 取消

git reset HEAD .

3.git 变基

  • git rebase develop
  • git rebase --continue (maybe resolve conflict)
  • git rebase --abort (abort rebase)
  • git push -f origin branch 链接

4.修改远程仓库地址

  • git remote rm origin --删除
  • git remote add origin xxx --添加
  • git remote set-url origin [email protected]:LAPP/msfq-android.git --修改

5.修改作者信息

git commit --amend --author="name [email protected]"

6.github fork后 同步

git remote add update_stream https://github.com/_original/_project.git
git fetch update_stream
git merge update_stream/master
git push origin master
如果需要给update_stream发送Pull Request
打开 https://github.com/_your/_project.git
点击Pull Request -> 点击New Pull Request -> 输入Title和功能说明 -> 点击Send pull request

7.git 如何忽略已经提交的文件或文件夹 (.gitignore文件无效)

git rm --cached 。这个命令会直接从暂存区删除文件,工作区则不做出改变。
git rm -r --cached 文件或文件夹路径

8.git clone 大文件失败

fatal: early EOF
fatal: fetch-pack: invalid index-pack output

9.git commit --amend 链接

可以借助 git commit --amend 修改Git已经提交的日志。
在 Bash 下 输入 git commit --amend ,按回车键,进入文本编辑界面,输入小写i,进入编辑模式。使用键盘上下左右键移动光标到日志所在的目标位置,然后进行修改。
按Esc键直接退出编辑模式,输入:wq,按回车键,表示改动保存并退出;输入:q!,按回车键,表示强制退出,所有改动不保存。
不更改commit内容可以用 git commit --amend --no-edit

10.github上传并发布到jitpack

git remote set-url origin https://[email protected]/linghp/RangeSeekBar.git/
然后发布release版本,打开jitpack:https://jitpack.io/ 复制仓库地址 get it

.其他

更新git下载文件大小git config --global http.postBuffer 1048576000

让你的工作目录完全回退到最近一次commit的时候
git reset --hard
git clean -f

标识储藏记录
git stash save 'message'

git stash apply --index 1

//clone某一个分支的最新一笔记录,这样仓库文件会小很多
git clone --depth=1 https://github.com/user/repo.git --branch my-branch --single-branch

Android app版本发布流程:

正常发布流程(以1.1.0升级至1.2.0为例)

1.总述

项目中使用了versionMajor,versionMinor,versionPatch,versionBuild(即:主版本号,次版本号,bug修复号,编译号)组成,每次提交测试时,versionBuild增1。

2.具体流程

  • 待测试完成,uat通过后,将本地所有未提交代码提交至远程,保证分支代码清洁。
  • 切至develop分支,并保证develop分支代码为最新。从develop分支切出一个分支release-1.2.0,将versionBuild号重置至1,并执行:
git commit -a -m "Bumped version number to 1.2.0"
  • 切至master分支,保证master分支代码为最新,并执行:
git merge --no-ff release-1.2.0 -m "Merge branch 'release-1.2.0' into master"
git push origin master
  • 增加版本tag,执行:
git tag -a 1.2.0 -m "v1.2.0"
git push origin 1.2.0
  • 切换至develop,并执行:
git merge --no-ff release-1.2.0 -m "Merge branch 'release-1.2.0' into develop"
git push origin develop
  • 删除无用分支(切无将release-1.2.0分支推送至远程):
git branch -d release-1.2.0
  • 切换至master分支译发布app v1.2.0:
gradle assembleProductionRelease

为下一个开发版本做准备

hotfix版本发布流程(以1.2.0 hotfix至1.2.1为例)

1.总述

app上线之后,若遇到紧急bug需要修复上线,则采用hotfix分支方式来进行版本发布。

2.具体流程

  • 从线上问题tag(1.2.0)处切出分支hotfix-1.2.1,然后将bug修复代码合并至hotfix-1.2.1分支上。
  • 待bug修复完成,验证完成,将本地所有未提交代码提交至远程,保证分支代码清洁。
  • 将versionBuild重置为1(1.2.1),并执行:
git commit -a -m "Bumped version number to 1.2.1"
  • 切换至master分支,保证代码为最新,并执行:
git merge --no-ff hotfix-1.2.1 -m "Merge branch 'hotfix-1.2.1' into master"
git push origin master
  • 增加版本tag,执行:
git tag -a 1.2.1 -m "v1.2.1"
git push origin 1.2.1
  • 切换至develop分支,并执行:
git merge --no-ff hotfix-1.2.1 -m "Merge branch 'hotfix-1.2.1' into develop"
git push origin develop
  • 删除无用分支:
git branch -d hotfix-1.2.1
  • 切换至master分支译发布app v1.2.1:
gradle assembleProductionRelease

回滚版本发布流程(以1.2.0回滚至1.1.0为例)

1.总述

app上线之后遇到重大bug时,需要回滚至前一个版本。

2.具体流程

  • 从1.2.0回滚到1.1.0,则从1.1.0中切出rollback-1.2.0分支,更改versionCode为12002,
    versionName为1.2.0-rb1 (此处rb代表1.2.0第一次rollback,第n次rollback依次类推)。
  • 1.2.0后续开发则按升级版本方式发布,新版本号为(1.2.1,第n次以此类推)。

与原生模块通信

  1. 继承ReactContextBaseJavaModule覆写getName(){return "NativeToast";},getConstants(),暴露方法(@ReactMethod)给js调用。
  2. 注册这个module,通过implements ReactPackage 实现createNativeModules方法。
  3. 在Application中implements ReactApplication中的getReactNativeHost方法,通过另外一个实现类ReactNativeHostImpl extends ReactNativeHost实现getPackages等方法。
  4. js中使用
    声明:
declare module "react-native" {  
     export interface NativeModulesStatic {
      NativeToast: NativeToast;}

使用:

import { NativeModules } from "react-native";
const NativeDevice = NativeModules.NativeDevice;

android ui

1.贝塞尔曲线

链接 example

2.Android 事件分发机制

目前所有的事件是针对ACTION_DOWN的,对于ACTION_MOVE和ACTION_UP我们最后做分析:

  • 由Activity的dispatchTouchEvent做分发,如果返回true或false就终止了,返回super继续
  • 由viewgroup的dispatchTouchEvent做分发,如果返回true就终止,返回false交给上一级onTouchEvent,返回super继续
  • 由viewgroup的onInterceptTouchEvent做拦截,如果返回true就拦截交给onTouchEvent,如果返回false或super继续
  • 由view的dispatchTouchEvent做分发,如果返回true就终止,返回false交给上一级onTouchEvent,返回super交给onTouchEvent继续
  • onTouchEvent返回true终止,返回false或super,交给上一级的onTouchEvent

ACTION_MOVE和ACTION_UP在传递的过程中并不是和ACTION_DOWN 一样,你在执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了。简单的说,就是当dispatchTouchEvent在进行事件分发的时候,只有前一个事件(如ACTION_DOWN)返回true,才会收到ACTION_MOVE和ACTION_UP的事件

3.recyclerview添加虚线分隔线

  • 在布局recyclerview中添加 :android:layerType="software",不用硬件加速;
  • 虚线shape文件中height要大于stroke中的width。
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="@dimen/public_16_dp"
    android:insetRight="@dimen/public_16_dp">
  <shape android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#F5F5F5"
        android:dashWidth="9dp"
        android:dashGap="3dp" />
    <size android:height="2dp"/>
  </shape>
</inset>

retrofit okhttp

1. okhttp3.ResponseBody获取消息体字符串的方法

body.source().readUtf8()

混淆

1.Caused by java.lang.IllegalStateException:Incomplete hierarchy for class *, unresolved classes [android.databinding.BaseObservable]

当用到databinding的时候,实体类集成BaseObservable,实体类不混淆,databinding混淆了,这是就会报这个错误,APP崩掉。

Android Studio,gradle那些事

一 快捷键

1.alt+q 显示当前代码的上一层。

2.Press Alt+F7 to quickly locate all occurrences of code referencing the symbol at the caret, no matter if the symbol is part of a class, method, field, parameter or another statement.

3.Press Ctrl+Shift+E to get a list of recently viewed or changed code fragments:


二 构建

1.Error:Could not resolve all dependencies for configuration ':classpath'

重启

2.read time out/Error:Could not run build action using Gradle distribution

删除账户下的.gradle

3.设置代理之后,同步失败

代理未清除,打开账户下的~/.gradle/gradle.properties,删除代理,解决地址

4.AndroidStudio 编译异常java.lang.OutOfMemoryError: GC overhead limit exceeded

在build.gradle中的android{}添加如下脚本就可以顺利编译了 ,

dexOptions {

javaMaxHeapSize "4g"

}

5.java.lang.ClassNotFoundException: Didn't find class "package.MyApplication" on path:

通过as直接在手机上运行的apk考出在其他低版本手机上安装打开闪退:
高版本的设备运行出的apk安装在Android L以下的设备上会报错;
低版本的设备运行出的apk安装在高版本设备上正常。

解决:通过gradle命令打包或者工具栏build apk 参考

6.gradle依赖传递管理

可以用transitive = false 的方式来关闭依赖传递特性,也可以采用添加@jar的方式忽略该依赖的所有传递性依赖。
排除依赖,exclude可以接收group和module两个参数。
使用强制版本force = true。

compile('org.hibernate:hibernate:3.1') {
 // 冲突时优先使用该版本
 force = true
 // 依据构建名称排除
 exclude module: 'cglib' 
 // 依据组织名称排除
 exclude group: 'org.jmock' 
 // 依据组织名称+构件名称排除
 exclude group: 'org.unwanted', module: 'iAmBuggy' 
 // 为本依赖关闭依赖传递特性
 transitive = false
}

参考链接

6.gradle依赖查看

./gradlew :app:dependencies --configuration debugCompileClasspath

other

一、获取签名信息:

1.从APK文件中获取签名信息

keytool -list -printcert -jarfile your_apk_file
输出信息:
签名Owner,Issuer等信息
签名的fingerprints,如md5及sha1等值
签名有效期等信息

2.从签名文件中获取签名信息

keytool -list -v -keystore your_kestore_file
注意,上述命令执行后,会提示输入密码,其实输入错误也没有关系,不影响结果。

二、adb命令

1.adb shell dumpsys activity activities 获取当前运行的Activity

三、枚举实现parcelable的问题

用ide生成的代码要改成

  @Override
  public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(ordinal());
  }

链接

四、sharedpreferences commit vs apply

apply方法是异步的,在还没保存成功,程序杀死了,造成数据丢失。

五、获取已安装应用的apk

1.通过adb命令
获取所需软件包的APK文件的完整路径名称。
adb shell pm path com.example.someapp
这将输出为:package:/data/app/com.example.someapp-2.apk。
将APK文件从Android设备提取出来。
adb pull /data/app/com.example.someapp-2.apk
2.Google Play商店中有一个名为"Apk extracter"的应用程序。通过这个应用程序,你可以得到安装应用程序的.apk文件。

六、FLAG_ACTIVITY_NEW_TASK

首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性相同),如果有,则直接把这个栈整体移动到前台,并保持栈中旧activity的顺序不变,然后被启动的Activity会被压入栈,如果没有,则新建一个栈来存放被启动的activity,注意,默认情况下同一个应用中的所有Activity拥有相同的关系(taskAffinity).
FLAG_ACTIVITY_NEW_TASK要配合taskAffinity使用,否则会重复压入栈,一般用singleTask,在Activity上下文之外启动Activity需要给Intent设置FLAG_ACTIVITY_NEW_TASK标志,不然会报异常

七、adb查看不同机型的CPU信息

adb shell cat /proc/cpuinfo

8、logcat快速查看当前跳转的Activity类信息

日志过滤start u0
message:"start u0"

android生命周期

1.activity回收之后还原:(1)onActivityResult() -> onStart() -> onResume()
(2) onCreate->onStart->onRestoreInstanceState->onPostCreate-onResume

生活

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.