日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)

發(fā)布時(shí)間:2025/6/17 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 方法追蹤代碼模板
  • 二、 追蹤 Launch 頁(yè)面的 onCreate 方法執(zhí)行情況
    • 1. 示例項(xiàng)目
    • 2. SD 卡訪問(wèn)權(quán)限問(wèn)題 ( 動(dòng)態(tài)權(quán)限申請(qǐng) )
    • 3. MainActivity onCreate 方法追蹤及動(dòng)態(tài)權(quán)限申請(qǐng)
  • 三、 查看 SD 卡根目錄的 trace 文件
  • 四、 Android Studio 中分析該 Trace 文件





一、 方法追蹤代碼模板



調(diào)用 Debug.startMethodTracing(traceFile.getAbsolutePath()) 開(kāi)始追蹤分析方法執(zhí)行情況 , 傳入文件路徑作為參數(shù) , 當(dāng)執(zhí)行 Debug.stopMethodTracing() 方法時(shí) , 會(huì)將方法追蹤信息保存到 traceFile.getAbsolutePath() 代表的文件路徑中 ;

在下面的代碼中 , 方法追蹤信息被保存到了 SD 卡下的 Method_Trace 文件中 ;



1. 方法追蹤使用流程 :


① 創(chuàng)建 File 對(duì)象 : 方法的執(zhí)行信息 , 將被保存到該 File 文件中 ;

File traceFile = new File(Environment.getExternalStorageDirectory(), "Method_Trace");

② 開(kāi)始方法追蹤 : 在該方法中 , 需要傳入上述 File 文件的絕對(duì)路徑 , 才能向該 File 文件中保存方法執(zhí)行信息 ;

Debug.startMethodTracing(traceFile.getAbsolutePath());

③ 停止方法追蹤 : 調(diào)用該方法后 , 結(jié)束追蹤 , 可以將 File 文件導(dǎo)出 , 并在 Android Studio 工具中分析方法執(zhí)行情況 ;

Debug.stopMethodTracing();

2. 代碼示例 :

// 1. 將追蹤信息存放到該文件中 File traceFile = new File(Environment.getExternalStorageDirectory(), "Method_Trace"); // 2. 開(kāi)啟方法追蹤 Debug.startMethodTracing(traceFile.getAbsolutePath());// TODO 要追蹤的內(nèi)容// 3. 停止方法追蹤 Debug.stopMethodTracing();



二、 追蹤 Launch 頁(yè)面的 onCreate 方法執(zhí)行情況





1. 示例項(xiàng)目


1 . 示例項(xiàng)目 : 以上一個(gè)項(xiàng)目直播推流的 MainActivity 為例 , 在該 Launch Activity 的 onCreate 方法中 , 添加上述方法追蹤信息 , 追蹤方法執(zhí)行情況 , 項(xiàng)目地址 han1202012 / RTMP_Pusher ;



2. SD 卡訪問(wèn)權(quán)限問(wèn)題 ( 動(dòng)態(tài)權(quán)限申請(qǐng) )


1. 權(quán)限問(wèn)題 : 我用的是 Google Pixel 2 手機(jī)作為測(cè)試機(jī) , 使用的是 Android 10 系統(tǒng) , 此時(shí)出現(xiàn)動(dòng)態(tài)權(quán)限問(wèn)題 ;


2. SD 卡訪問(wèn)權(quán)限 : Debug.startMethodTracing(traceFile.getAbsolutePath()) 方法作用是將方法追蹤信息寫出到 SD 卡的文件中 , 因此這里必須 動(dòng)態(tài)申請(qǐng) SD 卡的訪問(wèn)權(quán)限 ;


3. 靜態(tài)聲明權(quán)限 : 在 AndroidManifest.xml 文件中添加 SD 卡的訪問(wèn)權(quán)限 : 最后兩個(gè)是 SD 卡訪問(wèn)權(quán)限 ;

<!-- 前 4 個(gè)權(quán)限是讀寫權(quán)限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><!-- 最后兩個(gè)權(quán)限是 SD 卡訪問(wèn)權(quán)限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4. 動(dòng)態(tài)權(quán)限申請(qǐng) : MainActivity 中使用相關(guān)權(quán)限之前 , 必須先動(dòng)態(tài)申請(qǐng)權(quán)限 , 否則無(wú)法進(jìn)行方法追蹤 ;


注意 : 動(dòng)態(tài)權(quán)限申請(qǐng) , 必須要在 Debug.startMethodTracing 方法之前調(diào)用 , 否則開(kāi)始方法追蹤在沒(méi)有 SD 卡訪問(wèn)權(quán)限的情況下執(zhí)行 , 直接崩潰 ;



3. MainActivity onCreate 方法追蹤及動(dòng)態(tài)權(quán)限申請(qǐng)


下面代碼中有 ★ 的代碼是方法追蹤相關(guān)代碼 ; 添加了 333 行方法追蹤相關(guān)代碼 ;

動(dòng)態(tài)權(quán)限申請(qǐng)代碼 : 其中 [31,71][ \, 31 , 71 \,][31,71] 行區(qū)間內(nèi)的代碼是動(dòng)態(tài)權(quán)限申請(qǐng)相關(guān)代碼 ;

方法追蹤代碼 :88,90,12488 , 90 , 12488,90,124 行代碼是方法追蹤相關(guān)代碼 ;


package kim.hsl.rtmp;import android.Manifest; import android.content.pm.PackageManager; import android.hardware.Camera; import android.os.Build; import android.os.Bundle; import android.os.Debug; import android.os.Environment; import android.view.SurfaceView; import android.view.View; import android.widget.TextView;import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity;import java.io.File;public class MainActivity extends AppCompatActivity {/*** 顯示圖像的 SurfaceView 組件*/private SurfaceView mSurfaceView;/*** 直播推流器*/private LivePusher mLivePusher;/*** 需要獲取的權(quán)限列表*/private String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.INTERNET,Manifest.permission.MODIFY_AUDIO_SETTINGS,Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA};/*** 動(dòng)態(tài)申請(qǐng)權(quán)限的請(qǐng)求碼*/private static final int PERMISSION_REQUEST_CODE = 888;/*** 動(dòng)態(tài)申請(qǐng)權(quán)限*/@RequiresApi(api = Build.VERSION_CODES.M)private void initPermissions() {if (isLacksPermission()) {//動(dòng)態(tài)申請(qǐng)權(quán)限 , 第二參數(shù)是請(qǐng)求嗎requestPermissions(permissions, PERMISSION_REQUEST_CODE);}}/*** 判斷是否有 permissions 中的權(quán)限* @return*/@RequiresApi(api = Build.VERSION_CODES.M)public boolean isLacksPermission() {for (String permission : permissions) {if(checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED){return true;}}return false;}@RequiresApi(api = Build.VERSION_CODES.M)@Overrideprotected void onCreate(Bundle savedInstanceState) {/*此時(shí)應(yīng)用首界面啟動(dòng)完成, 將主題恢復(fù)成其它主題此處也可以根據(jù)不同的設(shè)置, 為應(yīng)用設(shè)置不同的主題*/setTheme(R.style.AppTheme);super.onCreate(savedInstanceState);// 初始化權(quán)限initPermissions();// ★ 1. 將追蹤信息存放到該文件中File traceFile = new File(Environment.getExternalStorageDirectory(), "Method_Trace");// ★ 2. 開(kāi)啟方法追蹤Debug.startMethodTracing(traceFile.getAbsolutePath());setContentView(R.layout.activity_main);mSurfaceView = findViewById(R.id.surfaceView);// 創(chuàng)建直播推流器, 用于將采集的視頻數(shù)據(jù)推流到服務(wù)器端// 800_000 代表 800K 的碼率mLivePusher = new LivePusher(this,640, 480, 800_000, 10,Camera.CameraInfo.CAMERA_FACING_BACK);// 設(shè)置 Camera 采集的圖像本地預(yù)覽的組件, 在 mSurfaceView 界面先繪制攝像頭// 此處要為 SurfaceHolder 設(shè)置 SurfaceHolder.Callback 回調(diào) , 通過(guò)里面的回調(diào)函數(shù)// 驅(qū)動(dòng)整個(gè)推流開(kāi)始mLivePusher.setPreviewDisplay(mSurfaceView.getHolder());findViewById(R.id.button_play).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// rtmp://123.56.88.254/myapp/0// 0 相當(dāng)于 直播的 密碼// 配置好服務(wù)器后, 記錄 IP 地址, 替換 123.56.88.254 IP 地址// rtmp://123.56.88.254/myapp/mystream 地址推流后// 可以直接在 RTMP 服務(wù)器端的主頁(yè), 使用 JWPlayer 觀看直播內(nèi)容// 網(wǎng)頁(yè)地址是 http//123.56.88.254:8080/String rtmpServerAddress = "rtmp://123.56.88.254/myapp/mystream";mLivePusher.startLive(rtmpServerAddress);((TextView)findViewById(R.id.textViewUrl)).setText("推流地址 : " + rtmpServerAddress);}});// ★ 3. 停止方法追蹤Debug.stopMethodTracing();} }



三、 查看 SD 卡根目錄的 trace 文件



應(yīng)用啟動(dòng)完畢后 , onCreate 方法執(zhí)行完畢 , 該方法追蹤文件就會(huì)在 SD 卡根目錄生成 ;

回顧下存放方法追蹤信息的文件創(chuàng)建過(guò)程 , 將 Trace 信息存儲(chǔ)到了 SD 卡根目錄的 Method_Trace 文件中 ;

// ★ 1. 將追蹤信息存放到該文件中 File traceFile = new File(Environment.getExternalStorageDirectory(), "Method_Trace");





四、 Android Studio 中分析該 Trace 文件



直接將該文件拖入 Android Studio 中即可 ;

總結(jié)

以上是生活随笔為你收集整理的【Android 性能优化】应用启动优化 ( 方法追踪代码模板 | 示例项目 | SD 卡访问权限 | 示例代码 | 获取 Trace 文件 | Android Studio 查看文件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 少妇一级淫片 | 国产日日日 | 欧美色悠悠 | 深爱激情综合网 | 少妇久久久久久久 | 亚洲va在线观看 | 久久精品国产亚洲av高清色欲 | 亚洲国产精品suv | 一级片视频免费观看 | 国产日韩欧美视频 | 短裙公车被强好爽h吃奶视频 | 色婷婷狠| 一级特黄aaa | 日韩欧美在线免费观看 | 亚洲精品 欧美 | 亚洲在线视频 | 国产精品成人国产乱一区 | 在线观看你懂得 | 日日碰日日摸 | 亲子乱子伦xxxx | 黄色性视频网站 | 蜜臀精品 | 青青操影院 | 欧美整片在线观看 | 看片在线观看 | 女人下面喷水视频 | 欧美黑人又粗又大又爽免费 | 久久亚洲欧洲 | av女人的天堂 | 在线一区二区三区四区五区 | 在线观看不卡av | 一区二区三区在线 | 男人插入女人下面的视频 | 不卡中文字幕在线观看 | 日韩精彩视频在线观看 | 国产做受网站 | 久久中文字幕精品 | av片在线观看网站 | 国av在线| 在线91视频 | caoprom在线 | 国产性70yerg老太| 嫩草嫩草嫩草嫩草 | 中文字幕不卡视频 | 国产精品久久一区二区三区 | 韩日精品在线观看 | 国产调教打屁股xxxx网站 | 中文字幕一区二区三区人妻四季 | 97精品人妻麻豆一区二区 | 成年人黄色免费网站 | 日韩人妻精品中文字幕 | 99riav国产在线观看 | 中文字幕国产视频 | 五月天色婷婷丁香 | 亚洲av高清一区二区三区 | 97国产精品久久久 | 欧美黄色小视频 | 国产午夜激情 | 成片免费观看视频大全 | 黄色大全免费观看 | 免费不卡视频 | 国产精品久久久久久久久免费 | 久久涩涩 | 日日夜夜综合网 | 国产在线www | 亚洲少妇30p | 精品人妻少妇AV无码专区 | 国产麻豆久久 | 国产精品视频网站 | 日本免费在线一区 | 在线观看av日韩 | 公侵犯一区二区三区四区中文字幕 | 日本免费一区视频 | 在线成人免费视频 | 色视频在线观看免费 | 精品人妻一区二区三区日产 | 中文在线字幕免费观 | 日韩国产精品久久 | 制服丝袜在线一区 | 少妇人妻一区二区 | 久久婷婷久久 | 国产精品激情偷乱一区二区∴ | 亚洲国产97在线精品一区 | 日本韩国中文字幕 | 欧美激情第五页 | 黄色网页网站 | 国产影视av | 高h喷水荡肉少妇爽多p视频 | 国产视频麻豆 | www.五月天婷婷.com | 91精品国产乱码久久久久 | 在线视频h | 6699嫩草久久久精品影院 | 久久福利在线 | 一区二区视频在线观看免费 | 猛1被调教成公厕尿便失禁网站 | 男女洗澡互摸私密部位视频 | 伊人网五月天 | 91传媒视频在线观看 |