├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── style.xml
│ │ │ │ └── themes.xml
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── bitmap1.png
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ └── activity_memory.xml
│ │ │ ├── values-night
│ │ │ │ └── themes.xml
│ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ └── drawable
│ │ │ │ └── ic_launcher_background.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── fuusy
│ │ │ │ └── fuperformance
│ │ │ │ ├── appstart
│ │ │ │ ├── dispatcher
│ │ │ │ │ ├── TaskCallBack.kt
│ │ │ │ │ ├── TaskStatBean.kt
│ │ │ │ │ ├── MainTask.kt
│ │ │ │ │ ├── utils
│ │ │ │ │ │ ├── DispatcherLog.kt
│ │ │ │ │ │ ├── ProcessUtils.kt
│ │ │ │ │ │ └── DispatcherExecutor.kt
│ │ │ │ │ ├── TaskStat.kt
│ │ │ │ │ ├── ITask.kt
│ │ │ │ │ ├── topologicalSort
│ │ │ │ │ │ ├── Graph.kt
│ │ │ │ │ │ └── TaskSortUtil.kt
│ │ │ │ │ ├── DispatchRunnable.kt
│ │ │ │ │ ├── Task.kt
│ │ │ │ │ └── TaskDispatcher.kt
│ │ │ │ ├── task
│ │ │ │ │ ├── LoadAppIdTask.kt
│ │ │ │ │ ├── LoadSirTask.kt
│ │ │ │ │ ├── BuglyTask.kt
│ │ │ │ │ ├── WeChatPayTask.kt
│ │ │ │ │ └── RouterTask.kt
│ │ │ │ ├── aop
│ │ │ │ │ └── PerformanceAOP.kt
│ │ │ │ ├── delay
│ │ │ │ │ └── DelayDispatcher.kt
│ │ │ │ └── TimeMonitorManager.kt
│ │ │ │ ├── memory
│ │ │ │ ├── bean
│ │ │ │ │ └── User.kt
│ │ │ │ ├── bitmap
│ │ │ │ │ ├── AnalyzerResult.java
│ │ │ │ │ ├── BitmapARTHook.kt
│ │ │ │ │ ├── Tools.java
│ │ │ │ │ └── Main.java
│ │ │ │ ├── MemoryActivity.kt
│ │ │ │ └── view
│ │ │ │ │ └── WaveView.kt
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── App.kt
│ │ └── AndroidManifest.xml
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── fuusy
│ │ │ └── fuperformance
│ │ │ └── ExampleUnitTest.kt
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── fuusy
│ │ └── fuperformance
│ │ └── ExampleInstrumentedTest.kt
├── proguard-rules.pro
└── build.gradle
├── settings.gradle
├── .idea
├── .gitignore
├── compiler.xml
├── vcs.xml
├── runConfigurations.xml
├── misc.xml
├── gradle.xml
└── jarRepositories.xml
├── FuPerformance.zip
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── README.md
├── gradle.properties
├── gradlew.bat
└── gradlew
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = "FuPerformance"
2 | include ':app'
3 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/FuPerformance.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/FuPerformance.zip
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | FuPerformance
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/bitmap1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xhdpi/bitmap1.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fuusy/FuPerformance/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/dispatcher/TaskCallBack.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.dispatcher
2 |
3 | interface TaskCallBack {
4 | fun call()
5 | }
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/dispatcher/TaskStatBean.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.dispatcher
2 |
3 | internal class TaskStatBean {
4 | var situation: String? = null
5 | var count = 0
6 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/dispatcher/MainTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.dispatcher
2 |
3 | abstract class MainTask : Task() {
4 | override fun runOnMainThread(): Boolean {
5 | return true
6 | }
7 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/memory/bean/User.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.memory.bean
2 |
3 | /**
4 | * @date:2021/8/22
5 | * @author fuusy
6 | * @instruction:
7 | */
8 | data class User(val name: String = "fuusy", val age: Int = 25, val sex: String = "男")
9 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Aug 01 13:37:37 CST 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 | local.properties
16 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/dispatcher/utils/DispatcherLog.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.dispatcher.utils
2 |
3 | import android.util.Log
4 |
5 | object DispatcherLog {
6 | var isDebug = true
7 | fun i(msg: String?) {
8 | if (!isDebug) {
9 | return
10 | }
11 | Log.i("task", msg!!)
12 | }
13 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/task/LoadAppIdTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.task
2 |
3 | import com.fuusy.fuperformance.appstart.dispatcher.Task
4 |
5 | /**
6 | * @date:2021/8/15
7 | * @author fushiyao
8 | * @instruction:
9 | */
10 | class LoadAppIdTask : Task() {
11 | override fun run() {
12 | //从后台请求微信支付所需的AppID
13 | }
14 | }
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FuPerformance
2 | ## 性能优化实战系列
3 |
4 | **持续更新**
5 |
6 | - [x] 启动优化
7 |
8 | [「性能优化系列」APP启动优化理论与实践(上)](https://juejin.cn/post/6844904131816079367)
9 | [「性能优化系列」APP启动优化理论与实践(下)](https://juejin.cn/post/6997253505723432974)
10 |
11 | - [x] 内存优化
12 |
13 | [「性能优化系列」APP内存优化理论与实践](https://juejin.cn/post/7001827852534579214)
14 |
15 | - [ ] 布局优化
16 | - [ ] 卡顿优化
17 | - [ ] apk瘦身优化
18 | - [ ] 电量优化
19 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/test/java/com/fuusy/fuperformance/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/task/LoadSirTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.task
2 |
3 | import com.fuusy.fuperformance.appstart.dispatcher.Task
4 | import com.kingja.loadsir.core.LoadSir
5 |
6 | /**
7 | * @date:2021/8/11
8 | * @author fushiyao
9 | * @instruction:
10 | */
11 | class LoadSirTask : Task() {
12 |
13 | override fun needWait(): Boolean {
14 | return true
15 | }
16 |
17 | override fun run() {
18 | LoadSir.beginBuilder()
19 | .commit()
20 | }
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/task/BuglyTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.task
2 |
3 | import com.fuusy.fuperformance.appstart.dispatcher.Task
4 | import com.tencent.bugly.Bugly
5 |
6 | /**
7 | * @date:2021/8/11
8 | * @author fushiyao
9 | * @instruction:
10 | */
11 | class BuglyTask : Task() {
12 |
13 | override fun dependsOn(): List?>? {
14 | return super.dependsOn()
15 | }
16 |
17 | override fun run() {
18 | Bugly.init(mContext, "12324334", false)
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/task/WeChatPayTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.task
2 |
3 | import com.fuusy.fuperformance.appstart.dispatcher.Task
4 |
5 | /**
6 | * @date:2021/8/15
7 | * @author fushiyao
8 | * @instruction:初始化微信支付
9 | */
10 | class WeChatPayTask :Task(){
11 |
12 | /**
13 | * 微信支付依赖AppId
14 | */
15 | override fun dependsOn(): List?>? {
16 | val task = mutableListOf>()
17 | task.add(LoadAppIdTask::class.java)
18 | return task
19 | }
20 |
21 | override fun run() {
22 | //初始化微信支付
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/appstart/task/RouterTask.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance.appstart.task
2 |
3 | import android.app.Application
4 | import com.alibaba.android.arouter.launcher.ARouter
5 | import com.fuusy.fuperformance.BuildConfig
6 | import com.fuusy.fuperformance.appstart.dispatcher.Task
7 |
8 | /**
9 | * @date:2021/8/11
10 | * @author fushiyao
11 | * @instruction:
12 | */
13 | class RouterTask() : Task() {
14 | override fun run() {
15 | if (BuildConfig.DEBUG) {
16 | ARouter.openLog()
17 | ARouter.openDebug()
18 | }
19 | ARouter.init(mContext as Application?)
20 | }
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/fuusy/fuperformance/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.fuusy.fuperformance
2 |
3 | import android.content.Intent
4 | import androidx.appcompat.app.AppCompatActivity
5 | import android.os.Bundle
6 | import android.widget.Button
7 | import com.fuusy.fuperformance.memory.MemoryActivity
8 |
9 | class MainActivity : AppCompatActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContentView(R.layout.activity_main)
13 |
14 | findViewById