Submit Search
Upload
AndroidにおけるActivity管理の話
•
2 likes
•
2,483 views
C
chigichan24
Follow
これはyakiniku-loversのLTで発表した内容です. まだ勉強中なので,もっとたくさんのことを勉強します.
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 59
Download now
Download to read offline
Recommended
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
Yoshie Kaneno
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
Recommended
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
Yoshie Kaneno
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
TomomitsuKusaba
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
m ishizaki
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
TDD のこころ
TDD のこころ
Takuto Wada
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
OCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰する
Kohei Tokunaga
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
DeNA
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
K Kinzal
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
Kurata Takeshi
More Related Content
What's hot
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
TomomitsuKusaba
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
Tetsuyuki Kobayashi
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
m ishizaki
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
TDD のこころ
TDD のこころ
Takuto Wada
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
OCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰する
Kohei Tokunaga
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
DeNA
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
Kent Ohashi
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
What's hot
(20)
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
Try new transport protocol SRT (ver. 2)
Try new transport protocol SRT (ver. 2)
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
TDD のこころ
TDD のこころ
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
OCIランタイムの筆頭「runc」を俯瞰する
OCIランタイムの筆頭「runc」を俯瞰する
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
"Simple Made Easy" Made Easy
"Simple Made Easy" Made Easy
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
Recently uploaded
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
K Kinzal
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
Kurata Takeshi
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
Toru Miyahara
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Toru Miyahara
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
Toru Miyahara
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
mizukami4
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
Masatsugu Matsushita
Recently uploaded
(8)
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
AndroidにおけるActivity管理の話
1.
AndroidにおけるActivityの 管理の話をしよう @chigichan24 Yakiniku LT #1
2.
Lifecycle https://developer.android.com/guide/components/activities/activity-lifecycle.html
3.
Management Activity こんな経験ありませんか?
4.
Management Activity バックグラウンドプロセスが いつの間にか殺されている.
5.
Lifecycle https://developer.android.com/guide/components/activities/activity-lifecycle.html
6.
Management Activity バックグラウンドプロセスが いつの間にか殺されている.
7.
Management Activity バックグラウンドプロセスが いつの間にか殺されている.
8.
Management Activity バックグラウンドプロセスが 理由なく適当に殺されている.
9.
Management Activity バックグラウンドプロセスが 理由なく適当に殺されている.
10.
Management Activity バックグラウンドプロセスが ある根拠にもとづいて殺されている.
11.
chigichan24 Androidのプロセス管理はLinuxに学べ
12.
Process管理 メモリが圧迫された時の挙動 Linux OOM Killer Slab Allocator Zone
Allocator 強制度 : 高 強制度 : 低
13.
Process管理 Linux OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
14.
Process管理 Linux OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
15.
Zone Allocator Process管理 Linux いわゆるページング,Swap領域の使用など. 同期可能ページ
破棄可能ページ 回収可能ページ スワップ可能ページ
16.
Process管理 Linux OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
17.
Process管理 Linux Slab Allocator Shrink_slab(
) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS ex3 ex4 ... キャッシュ キャッシュ キャッシュ Shrink( ) Shrink( )
18.
Process管理 Linux Slab Allocator Shrink_slab(
) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS ex3 ex4 ... キャッシュ キャッシュ キャッシュ Shrink( ) Shrink( ) コールバックとして登録
19.
Process管理 Linux Slab Allocator Shrink_slab(
) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS ex3 ex4 ... キャッシュ キャッシュ キャッシュ Shrink( ) Shrink( ) メモリヤバイから殺してw
20.
Process管理 Linux Slab Allocator Shrink_slab(
) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS ex3 ex4 ... キャッシュ キャッシュ キャッシュ Shrink( ) Shrink( ) メモリヤバイから殺してw
21.
Process管理 Linux OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
22.
OOM Killer Process管理 Linux OOM
Score の高いプロセスを無慈悲に殺す
23.
OOM Killer Process管理 Linux OOM
Score の高いプロセスを無慈悲に殺す
24.
OOM Killer Process管理 Linux OOM
Score の高いプロセスを無慈悲に殺す
25.
OOM Killer Process管理 Linux OOM
Score の高いプロセスを無慈悲に殺す アドホックに割りと適当に計算され,適当に殺される
26.
OOM Killer Process管理 Linux OOM
Score の高いプロセスを無慈悲に殺す アドホックに割りと適当に計算され,適当に殺される oom_killer(444) : oom_killerの値を多少考慮する. oom_score_adj(644) : -1000~1000の値を設定する.
27.
Process管理 Linux OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
28.
Process管理 Android OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
29.
Process管理 基本的にはLinuxの形式を用い, 部分的にAndroidに最適化をする.
30.
Process管理 Android OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
31.
Process管理 OOM Killer Slab Allocator Zone
Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに Android
32.
Zone Allocator Process管理 いわゆるページング,Swap領域の使用など. 同期可能ページ 破棄可能ページ 回収可能ページ
スワップ可能ページ Android
33.
Zone Allocator Process管理 いわゆるページング,Swap領域の使用など. 同期可能ページ 破棄可能ページ 回収可能ページ
スワップ可能ページ Android AndroidではSwapは実質的に効かない.
34.
Process管理 OOM Killer Slab Allocator Zone
Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに Android
35.
Process管理 Slab Allocator Shrink_slab( ) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS キャッシュ ex3 キャッシュ Shrink( ) ex4 キャッシュ Shrink( ) Android Low Memory Killer アプリ Shrink( )
36.
Process管理 Slab Allocator Shrink_slab( ) VFS上でのキャッシュや,各ファイルシステムのキャッシュを殺す. VFS キャッシュ ex3 キャッシュ Shrink( ) ex4 キャッシュ Shrink( ) Android Low Memory Killer アプリ Shrink( )
37.
Low Memory Killer Process管理
Android OOM Killerのように無慈悲に殺すのではなく段階的に殺す. Androidでは(バックグラウンドなどのアプリ)はキャッシュと同等の扱い.
38.
Low Memory Killer Process管理
Android OOM Killerのように無慈悲に殺すのではなく段階的に殺す. Androidでは(バックグラウンドなどのアプリ)はキャッシュと同等の扱い.
39.
Low Memory Killer Process管理
Android OOM Killerのように無慈悲に殺すのではなく段階的に殺す. Androidでは(バックグラウンドなどのアプリ)はキャッシュと同等の扱い. システムの空きページが19034以下のとき,oom_adjが 15以上のプロセスを殺す. システムの空きページが15299以下のとき,oom_adjが 9以上のプロセスを殺す. . .
40.
Low Memory Killer Process管理
Android OOM Killerのように無慈悲に殺すのではなく段階的に殺す. Androidでは(バックグラウンドなどのアプリ)はキャッシュと同等の扱い. システムの空きページが19034以下のとき,oom_adjが 15以上のプロセスを殺す. システムの空きページが15299以下のとき,oom_adjが 9以上のプロセスを殺す. . .
41.
Low Memory Killer Process管理
Android OOM Killerのように無慈悲に殺すのではなく段階的に殺す. Androidでは(バックグラウンドなどのアプリ)はキャッシュと同等の扱い. システムの空きページが19034以下のとき,oom_adjが 15以上のプロセスを殺す. システムの空きページが15299以下のとき,oom_adjが 9以上のプロセスを殺す. . . こいつを外からいじる
42.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd
43.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd Activityの状態(正確にはActivityStack)を管理
44.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd init.rcからforkされているので root権限ありドライバ
45.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj Shrink_slab( ) ActivityManagerService.java lmkd
46.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj Shrink_slab( ) ActivityManagerService.java lmkd
47.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj Shrink_slab( ) ActivityManagerService.java lmkd
48.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd
49.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd -17 ~ 16の範囲の値
50.
Process管理 Android Low Memory
Killer Shrink( ) process oom_adj process oom_adj process oom_adj ActivityManagerService.java lmkd -17 ~ 16の範囲の値 値 のupdate
51.
Process管理 Android ActivityManagerService.java ActivityManagerServiceの-17 ~
16の範囲の値は android/server/am/Process.javaに様々な状態のadj(定数値)が保存されている. 16 最も削除して良いもの 15~9 キャッシュされているアプリ 8 あまりに活動していないSDKのservice 7 1つ前にユーザーが使っていたアプリ 6 ホームアプリ 5 SDKのserviceを含むプロセス 3 バックアップ実⾏中プロセス 0 現在前⾯に出ているアプリ -11 永続化サービス -16 システムプロセス -17 ActivityManagerServiceが管理していないネィティブプロセス
52.
Process管理 Android OOM Killer Slab
Allocator Zone Allocator 強制度 : 高 強制度 : 低 メモリが圧迫された時の挙動 Userも触れる Kernelがよしなに
53.
まとめ https://developer.android.com/guide/components/activities/activity-lifecycle.html
54.
まとめ https://developer.android.com/guide/components/activities/activity-lifecycle.html oom_score_adjという仕組み
55.
まとめ https://developer.android.com/guide/components/activities/activity-lifecycle.html lowmemorykiller
56.
結論 root権限を取って minfreeとadjを書き換えよう! LowMemoryKiller.c や ActivityManagerService.javaの コードを読もう!
57.
参考 Androidを支える技術Ⅰを買わずに先にⅡを買ってしまった
58.
Androidおすすめ(これから読む)本 Kotlin in Actionの訳本が10月末に出ます.
様々な設計法を網羅した本が出ます.
59.
宣伝 Cyderと私はAndroidエンジニアを探しています(公私混同)
Download now