├── 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 | 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