Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pixiv SUMMER BOOT CAMP 2015 講義資料
Search
Keisuke SASAKI
September 24, 2015
Technology
0
3.4k
pixiv SUMMER BOOT CAMP 2015 講義資料
Androidのはなしをしました
Keisuke SASAKI
September 24, 2015
Tweet
Share
More Decks by Keisuke SASAKI
See All by Keisuke SASAKI
ピクシブのAndroidアプリ事情
rooandqoo
1
4.4k
Rails寺子屋 x kosenconf 告知
rooandqoo
0
68
高専カンファレンス in 釧路 発表資料
rooandqoo
2
800
Other Decks in Technology
See All in Technology
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
170
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
130
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
110
AI専用のリンターを作る #yumemi_patch
bengo4com
5
4.3k
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
130k
Claude Code に プロジェクト管理やらせたみた
unson
6
4k
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
690
Geminiとv0による高速プロトタイピング
shinya337
1
270
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
340
SEQUENCE object comparison - db tech showcase 2025 LT2
nori_shinoda
0
140
赤煉瓦倉庫勉強会「Databricksを選んだ理由と、絶賛真っ只中のデータ基盤移行体験記」
ivry_presentationmaterials
2
360
SmartNewsにおける 1000+ノード規模 K8s基盤 でのコスト最適化 – Spot・Gravitonの大規模導入への挑戦
vsanna2
0
130
Featured
See All Featured
Writing Fast Ruby
sferik
628
62k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
740
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Making Projects Easy
brettharned
116
6.3k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
690
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Facilitating Awesome Meetings
lara
54
6.4k
Transcript
Androidのはなし るーく@RooandQoo
About me 佐々木 佳祐@るーく 社歴2(4)年目 アプリ@マンガプロジェクト インターネットで二児の父をしています
pixiv マンガ
pixiv マンガ ・(ほぼ)毎日届く編集部のオススメマンガ ・読みやすい縦読みビューワー ・pixivコミックの連載も読めちゃう ・無料!!!!!!!!!!!!
pixiv マンガ Android / iOS
pixiv マンガ このアプリを つくる上での テクニックとかを 紹介していきます
º iOSのみなさんゴメンナサイ…。
Activityはなるべくスリムにする
画面を構成する基本要素 Activity Fragment (Custom)View
Activity
Fragment
Fragment
(Custom)View
(Custom)View
(Custom)View
その気になればActivity1つでなんでもできる
その気になればActivity1つでなんでもできる なんでもは言いすぎたかも
値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent
戻るボタン テーマの設定 他の画面から呼び出される etcetc…
全部やらせたら当然太る
肥大化したクラスはメンテしたくない
Activity, Fragment, View 得意分野がそれぞれ異なるので 任せることが大事
特にActivityは Activityにしかできないことを やらせる方が良い
値の処理 バリデーション アニメーション ネットワーク処理 DB操作 メニュー 画面回転の対応 Intentの処理 Fragment管理 KeyEvent
戻るボタン テーマの設定 他の画面から呼び出される etcetc…
メニュー Intentの処理 Fragment管理 テーマの設定 他の画面から呼び出される
FragmentとViewは 何をすべきか?
・Viewの集合をユーザに見せる Fragment 定義されたレイアウトを表示する 画面を切り替える
・ライフサイクルに応じた処理 Fragment Activityにくっついた、離れた Viewが生まれた、死んだ 画面が回転された
・ネットワーク処理 Fragment リクエストを投げる 結果を受け取って何かする
・DB, ファイルの操作 Fragment
・画面パーツとして利用する (Custom)View パーツにユーザが操作を加えたとき なんらかの値が変わる場合 CustomViewが処理する
CustomViewの使用例
pixivマンガのトップ
CustomView
CustomView ここが 変わる
CustomView ちなみに これも CustomView
Activity(この場合はFragment)でもできる 1. GridViewとTextViewをFragment内で定義 2. ジャンル一覧のGridViewにListenerを設定 3. Listener内のonItemSelectedでTextViewの中身を更新
処理をViewに譲渡することで 見通しがよくなる Fragmentから GenreLabelView.setGenreTextView(“ジャンル名”) を呼ぶだけ!!
CustomViewのつくりかた 1. CustomViewとして使うもののレイアウトファイルをつくる 2. なんちゃらLayoutを継承したクラスをつくる 3. コンストラクタを書く 4. あるActivity(Fragment)のレイアウトに埋め込む 5.
または、使いたい場面で直接インスタンスを作って使う
レイアウト埋め込み型
インスタンスつくる型
たのしいCustomViewライフを!!
Fragmentは闇が深い
Fragmentは人類には早すぎたんや… @choco_biimu
とはいえ使わないわけにもいかない
用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5.
などなど ググるといい感じの資料が出てくる
用法・用量を守ろう 1. コンストラクタのつくりかたを守る 2. 初期値の設定はset/getArguments()で 3. startActivityはあんましないほうが良い 4. 特にstartActivityForResult()は怪しい 5.
などなど というかこの資料もリファレンスがあるので あとで教えます
細かいこといろいろ
画面遷移はcreateIntent()で! Activity1 Activity2
よくあるパターン Activity1.startActivity(this, Activity2.class)
よくあるパターン Intent intent = new Intent(this, Activity2.class) intent.putExtra(“hoge”, 1) startActivity(intent)
遷移先のことを常に意識しないといけない
createIntent public static Intent createIntent(Activity fromactivity) { Intent intent =
new Intent(fromActivity, Activity2.class); return intent; } 呼び出される側(Activity2)
createIntent startActivity(Activity2.createIntent(this)) 呼び出す側(Activity1)
createIntent public static Intent createIntent(Activity fromactivity, int a) { Intent
intent = new Intent(fromActivity, Activity2.class); intent.putExtra(“hoge”, a) return intent; } 値を渡したいとき
createIntent startActivity(Activity2.createIntent(this, 1)) 値を渡したいとき キーの名前を意識しなくて済む
List(Grid)Viewを使うときは ViewHolderを実装する スクロール した時に Viewを 使いまわす
List(Grid)Viewを使うときは ViewHolderを実装する DataBindingで 置き換えられそう スクロール した時に Viewを 使いまわす
Activityはなるべくスリムに まとめ Fragment, CustomViewをうまく使おう Fragmentを使うときはルールを守ろう 画面遷移はcreateIntent()で DataBindingすごそう
参考資料 IUUQXXXTMJEFTIBSFOFUZBO[NESPJELBJHJZBO[N "DUJWJUZ 'SBHNFOU $VTUPN7JFXͷ͍͚Ϛονϣͳ "DUJWJUZʹ͞ΑͳΒ͢Δํ๏
参考資料 IUUQHGYIBUFOBCMPHDPNFOUSZ "OESPJE%BUB#JOEJOHಋೖͷୈҰา #VUUFS,OJGF 7JFX)PMEFSύλʔϯΛஔ͖͑Δ