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
Grenade - Type safe intent buidler
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Keisuke Kobayashi
October 26, 2016
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Grenade - Type safe intent buidler
potatotips 34
Keisuke Kobayashi
October 26, 2016
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
240
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
2.7k
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.7k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
1k
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
3k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
350
APIクライアントをCodableで置き換えた話
kobakei
0
1.6k
開発者が知っておきたい通知の歴史
kobakei
9
7.9k
Other Decks in Programming
See All in Programming
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
330
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
170
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
250
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
220
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
2
640
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
RTSPクライアントを自作してみた話
simotin13
0
600
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
310
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
230
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
New "Type" system on PicoRuby
pocke
1
920
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Marketing to machines
jonoalderson
1
5.4k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Transcript
(SFOBEF 5ZQFTBGFJOUFOUCVJMEFS ,FJTVLF,PCBZBTIJ QPUBUPUJQT
,FJTVLF,PCBZBTIJ w (JU)VC 2JJUB!LPCBLFJ w 5XJUUFS!LTL@LCZT w $PVCJD *OD w
"OESPJE#BDLFOEFOHJOFFS
໌ࣔత*OUFOUͷ࡞Γํ
#BTJD Intent intent = new Intent(context, HogeActivity.class); startActivity(intent);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0);
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); w ͍ΖΜͳը໘ʹఆ͕ग़ͯདྷΔ
XJUIFYUSB Intent intent = new Intent(context, HogeActivity.class); intent.putExtra("name", "Takashi"); intent.putExtra("age",
30); startActivity(intent); String name = getIntent().getStringExtra("name"); int age = getIntent().getIntExtra("age", 0); w ͍ΖΜͳը໘ʹఆ͕ग़ͯདྷΔ w มΛ٧ΊΕͯίϯύΠϧΤϥʔग़ͳ͍
TUBUJDNFUIPE static void startActivity(Context context, String name, int age) {
Intent intent = new Intent(context, HogeActivity.class); intent.putExtra(KEY_NAME, "Takashi"); intent.putExtra(KEY_AGE, 30); context.startActivity(intent); } String name = getIntent().getStringExtra(KEY_NAME); int age = getIntent().getIntExtra(KEY_AGE, 0);
ͦ͏ͩɺࣗಈੜ͠Α͏
(SFOBEF IUUQTHJUIVCDPNLPCBLFJHSFOBEF
6TBHF @Navigator public class DetailActivity extends AppCompatActivity { // Required
params @Extra String name; // Optional params @Extra @Optional int age; ... }
6TBHF startActivity(new DetailActivityNavigator("Takashi") .age(30) .flags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) .build(context);
6TBHF @Navigator public class DetailActivity extends AppCompatActivity { ... @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Inject fields DetailActivityNavigator.inject(this, getIntent()); } }
4FWFSBMDPOTUSVDUPST @Navigator({ "foo,bar1", "foo,bar2" }) public class DetailActivity extends AppCompatActivity
{ @Extra String foo; @Extra int bar1; @Extra long bar2; ... }
4FWFSBMDPOTUSVDUPST startActivity(new DetailActivityNavigator(foo, bar1) .build(context)); startActivity(new DetailActivityNavigator(foo, bar2) .build(context));
8PSLXJUI1BSDFMFS @Navigator public class DetailActivity extends AppCompatActivity { // Use
parcelable entity as field @Extra User user; ... }
8PSLXJUI1BSDFMFS startActivity(new DetailActivityNavigator(new User()) .build(context));
None