Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Android開発初心者にありがちなこと
Search
andfactory, inc.
October 25, 2018
Programming
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android開発初心者にありがちなこと
ginyolithさん発表のスライドです。
andfactory, inc.
October 25, 2018
More Decks by andfactory, inc.
See All by andfactory, inc.
UIViewのレイアウト更新メソッドを整理する
andfactory
0
460
Codableあるある
andfactory
0
230
Androidエンジニアあるある
andfactory
0
270
Collectionの罠
andfactory
0
210
Cocoa Touch Frameworkあるある
andfactory
0
360
iOS開発に慣れてきた時にやりがちあるある
andfactory
0
220
社内勉強会資料 - スクラム・アジャイル開発
andfactory
0
650
Other Decks in Programming
See All in Programming
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
5
1.3k
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
420
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
220
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
120
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
560
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
不幸な GC
chencmd
0
890
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
470
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
220
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
GraphQLとの向き合い方2022年版
quramy
50
15k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
A Soul's Torment
seathinner
7
3.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Balancing Empowerment & Direction
lara
6
1.3k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
A Modern Web Designer's Workflow
chriscoyier
698
190k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Transcript
Android։ൃ ॳ৺ऀʹ͋Γ͕ͪͳ͜ͱ
ࣗݾհ • ໊લɿ ࢙࠸ • ॴଐɿגࣜձࣾΞΠϦοδ • ৬छɿAndroidΤϯδχΞ • LIKE
: ԻָʢΞΧϖϥʣɺࣸਅ
֓ཁ Android։ൃ࢝Ίͨͯͷ࣌ʹ • ࠔ͍ͬͯͨࣄ • ͦͷղܾࡦ Λհ
Կͯ͠ͳ͍ͷʹ Ϋϥογϡ͢Δ
None
5ISFBE͕ݪҼɾɾɾʁ
ݪҼ public class MainActivity extends Activity { TextView mTextView; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = findViewById(R.id.button1); mTextView = findViewById(R.id.textView); // ボタン1クリック時 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { mTextView.setText("hoge"); } }).start(); } });
ݪҼ public class MainActivity extends Activity { TextView mTextView; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = findViewById(R.id.button1); mTextView = findViewById(R.id.textView); // ボタン1クリック時 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { mTextView.setText("hoge"); } }).start(); } });
ؾΛ͚ͭΔࣄ • ݪҼɿ • UiThreadҎ֎͔ΒUIʢςΩετͳͲʣΛॻ͖ ͑Δࣄ͕ग़དྷͳ͍ • ରࡦɿ • UIThreadҎ֎͔ΒHandler.post(),
͘͠ runOnUiThread༻͍ͯUIΛૢ࡞͢Δɻ
ೖॻͱݱ࣮ͷΪϟοϓ
νϡʔτϦΞϧͷґଘϥΠϒϥϦ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.google.android.gms:play-services-maps:15.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
νϡʔτϦΞϧͷίʔυ public class MainActivity extends Activity { TextView mTextView; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = findViewById(R.id.button1); Button button2 = findViewById(R.id.button2); mTextView = findViewById(R.id.textView); // ボタン1クリック時 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { button1Clicked(); } });
࣮ࡍͷґଘϥΠϒϥϦ dependencies { // App's dependencies, including test compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
compile "com.android.support:cardview-v7:$rootProject.supportLibraryVersion" compile "com.android.support:design:$rootProject.supportLibraryVersion" compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion" compile "com.android.support:support-v4:$rootProject.supportLibraryVersion" compile "com.android.support.test.espresso:espresso-idling-resource:$rootProject.espressoVersion" compile "com.google.guava:guava:$rootProject.guavaVersion" compile "android.arch.persistence.room:runtime:$rootProject.roomVersion" annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion" // Dagger dependencies annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.daggerVersion" compile "com.google.dagger:dagger:$rootProject.daggerVersion" compile "com.google.dagger:dagger-android:$rootProject.daggerVersion" compile "com.google.dagger:dagger-android-support:$rootProject.daggerVersion" annotationProcessor "com.google.dagger:dagger-android-processor:$rootProject.daggerVersion" // Dependencies for local unit tests testCompile "junit:junit:$rootProject.ext.junitVersion" testCompile "org.mockito:mockito-all:$rootProject.ext.mockitoVersion" testCompile "org.hamcrest:hamcrest-all:$rootProject.ext.hamcrestVersion" // Android Testing Support Library's runner and rules androidTestCompile "com.android.support.test:runner:$rootProject.ext.runnerVersion" androidTestCompile "com.android.support.test:rules:$rootProject.ext.rulesVersion" androidTestCompile "android.arch.persistence.room:testing:$rootProject.roomVersion" // Dependencies for Android unit tests androidTestCompile "junit:junit:$rootProject.ext.junitVersion" androidTestCompile "org.mockito:mockito-core:$rootProject.ext.mockitoVersion" androidTestCompile "com.google.dexmaker:dexmaker:$rootProject.ext.dexmakerVersion" androidTestCompile "com.google.dexmaker:dexmaker-mockito:$rootProject.ext.dexmakerVersion"
ViewModel…? public class TaskDetailViewModel extends TaskViewModel { @Nullable private TaskDetailNavigator
mTaskDetailNavigator; public TaskDetailViewModel(Context context, TasksRepository tasksRepository) { super(context, tasksRepository); } public void setNavigator(TaskDetailNavigator taskDetailNavigator) { mTaskDetailNavigator = taskDetailNavigator; } public void onActivityDestroyed() { // Clear references to avoid potential memory leaks. mTaskDetailNavigator = null; }
ֶशͷ༏ઌ 1. ΞʔΩςΫνϟ, databindingͷ͍ํ • MVVM, MVPͳͲɻMVVMͰDatabinding͕؊ͱͳΔͷͰ߹ Θͤͯ 2. ػೳՃʹ΄΅ඞਢͳϥΠϒϥϦ
• Retrofit, OkHttpͳͲ 3. Ϟμϯͳઃܭ or هड़͕ՄೳͳϥΠϒϥϦ • RxJava, AAC, dagger2, Kotlin etc…
ͳ͔ͥToast͕දࣔ͞Εͳ͍
ͳ͔ͥToast͕දࣔ͞Εͳ͍ @Override public void showToast() { Toast.makeText(HogeActivity.this, “Hoge”, Toast.LENGTH_SHORT); }
ͳ͔ͥToast͕දࣔ͞Εͳ͍ @Override public void showToast() { Toast.makeText(HogeActivity.this, “Hoge”, Toast.LENGTH_SHORT).show(); }
KotlinΛ͏ͱ… // 拡張関数を定義 fun Activity.toast(msg : String) { Toast.makeText(this, msg,
Toast.LENGTH_SHORT).show() } // Activityを継承するクラスでtoast関数を呼ぶことが可能に fun showToast() {
[email protected]
("hoge") }
ςετ͕͍͠
Context͕औಘͰ͖ͳ͍ʂ Ͱ࣮ػςετͨ͘͠ͳ͍
ରࡦ • ϥΠϒϥϦΛ͏ • Robolectric • Android Test ( Android
Jetpack ) • ຊʹContextඞཁʁ • ઃܭΛݟ͢
Thank you for listening!