SlideShare a Scribd company logo
1 of 55
Girişimciler ve Geliştiriciler için
Fatih Sökmen
https://github.com/fatihsokmen/android-seminar-code
Android OS
Linux Kernel, (libc, X11 gibi kutuphane ve
runtimelar yok)
Open Handset Alliance tarafından desteklendi, proje
Google tarafından yönetildi
Ilk beta SDK in 2007
Apache Software Licence, Version 2.0 (Kernel hariç)
SQLLite, Webkit, OpenGL, Medya Yoneticisi
CDD - CTS
Android SDK
Telephony, Wifi Manager, P2P, Bluetooth & NFC
Map, Location
Multimedya Kontrolu
Sensor Api (Accelerometer, Compass, ...)
Process, IPC, Arka plan servisleri
Data Stores (SQLite, ContentProviders, ...)
UI Framework
Development Framework
Android Api
Geliştirme Araçları (Compiler, packagers, dextools)
Virtual Device Manager ve Emulator
Dokümantasyon
Örnek Kodlar
developer.android.com
Linux Kernel
Bionic | Binder IPC | Ashmem | Pmem |
Wakelocks | Alarms
Low Memory Killer | Paranoid Network
Security | ...
Android Runtime
Dalvik | ART
JavaVM - stack-based
Dalvik - register based
Apk
*.java
R.java
jar Classes.dex
dxjavac
res/*.*
Resources.arc
Android Manifest
app.jar
app.apk
aapt
Cihaz Dağılımı
Data collected during a 7-day period ending on 4 May, 2015
Device Api
%93 > 4.0+
Geliştirme Ortamları
Eclipse
Android Studio
Build System - Gradle
<manifest/>
Güvenlik
SandBox
Permission
Signature
Komponentler
Activity
Service
ContentProvider
Intent
BroadcastReceiver
Notification
MainTread
(Main Looper)
Activity Lifecycle
Layout
inflate
<merge/>
LinearLayout
FrameLayout
RelativeLayout
<view/>
<ViewStub/>
Fragment
Dinamik UI
Tekrar Kullanılabilirlik
Etkin Hafıza Yönetimi
Parametresiz “Constructor”
Uygulama içi
haberleşme
Fragment -> Activity
Service <-> Activity (UI)
UX ve Kullanıcı Etkileşimi
Çözünürlük (px vs dp)
xhdpi 2.0
hdpi 1.5
mdpi 1.0 (baseline)
ldpi 0.75
Yükseklik & Genişlik
wrap_content & match_parent & dp
Nine-Patch
Selector
Navigasyon
ActionBar & Toolbar
Drawer
List & Grid
Memory Management
Active Process
Visible Process
Started Service
Process
Background
Process
Background
Process
Uygulama
Önceliği
Low Memory Killer
Application Lifecycle Events
public class MyApp extends Application {
@Override
public void onLowMemory() {
super.onLowMemory();
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
}
}
Non-static sınıf tanımı ve
dezavantajları
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SampleTask(this).execute("http://...");
}
private void handleData(String data) {
...
}
private class SampleTask extends AsyncTask<URL, Void, String> {
protected String doInBackground(URL... url) {
// job in background thread
...
}
protected void onPostExecute(String data) {
handleData(data);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SampleTask(this).execute("http://...");
}
private static class SampleTask extends AsyncTask<URL, Void, String> {
private WeakReference<SampleActivity> activityRef;
public SampleTask(activity) {
activityRef = new WeakReference(activity);
}
protected String doInBackground(URL... url) {
// job in background thread
...
}
protected void onPostExecute(String s) {
if (activityRef.get() != null) {
// do some stuff with activity
}
}
Uzun ömürlü objelerin
Context’e bağımlılığını
azaltmak için
«WeakReference» kullanımı
public class DownloadManager {
private static DownloadManager instance = new DownloadManager();
private ArrayDeque<Callback> callbacks;
private DownloadManager() {
callbacks = new ArrayDeque<Callback>();
}
public static DownloadManager getInstance() {
return instance;
}
public void enqueue(String url, Callback callback) {
callbacks.add(callback);
// enqueue download request
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected void download(String url) {
DownloadManager.getInstance().enqueue(url,
new Callback<>() {
public void success(...) {
}
public void failure(...) {
}
});
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected void enqueueDownload() {
DownloadManager.getInstance().enqueue("http://...",
new Callback<>() {
public void success(...) {
}
public void failure(...) {
}
});
}
Anonim inner
classlar outer
classlara her
zaman referans
tutarlar
public class DownloadManager {
private static DownloadManager instance = new DownloadManager();
private ArrayDeque<<WeakReference<Callback>> callbacks;
private DownloadManager() {
callbacks = new ArrayDeque<Callback>();
}
public static DownloadManager getInstance() {
return instance;
}
public void enqueue(String url, Callback callback) {
callbacks.add(new WeakReference<Callback>(callback));
...
}
}
Background threadlerinizi
activite sonlanırken
sonlandırın, runtime bunu
sizin yerinize yapmaz.
Bunun için thread ve aktiviteler
arasında interface metodları tanımlayın
class BackgroundWorker extends Thread {
private volatile boolean keepRunning = false;
public void run() {
keepRunning = true;
while (keepRunning) {
// do background stuff
}
}
public void finish() {
keepRunning = false;
}
}
private BackgroundWorker worker;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
worker = new BackgroundWorker();
worker.start();
}
protected void onDestroy() {
super.onDestroy();
worker.finish();
}
Büyük boyutlu bitmap
kullanımında nerelere dikkat
edilmeli ?
byte[] bitmap = ... //Load from network or resources
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(bitmap, 0, bitmap.length,
Options options);
int h = options.outHeight;
int w = options.outWidth;
Bitmaplerin önbelleğe alınması
Bitmaplerin önbelleğe alınması için
‘WeakReference’ yerine LRU’u tercih
edin. Peki neden ?
Dinamik datanızı
ContentProvider’larda
depolayın
Bu, etkin hafıza kullanımı için ve
etkili bir arayüz deneyimi için
önemlidir.
Avantajları
Büyük miktarda datayı hafızada
tutmazsınız
Off-line data
Cursor ile listeleme çok hızlıdır.
Datanızı diğer uygulamalara açmak için
bir arayüz sunar.
View-Db arasındaki senkronizasyonu
sağlarsınız.
Uygulama secret’lerini
saklama
MODE_PRIVATE
Password-based encryption
KeyStore - /data/misc/keystore/
ref: nelenkov.blogspot.jp/2011/11/ics-credential-storage-implementation.html
Keystore
User_0
User_1
User_2
keystore
keymaster
.masterkey
key_1
key_2
Hardware
.masterkey
key_1
key_2
user_0 keystore
user_1 keystore
http://securityintelligence.com/android-keystore-stack-buffer-overflow-to-keep-things-simple-buffers-are-always-larger-than-needed/#.VVNJc9Oqqkr
Tap-jacking
setFilterTouchesWhenObscured = true
Static over virtual method
%15-%20 daha hızlı
Yaygın kullanılan kütüphaneler
!! 65K Limit !!
RxJava
Retrofit - REST Client
ButterKnife - Injection
Picasso - Image Loading
Glide - Image Loading
OkHttp - Http - SPDY Client
Otto - Service Bus
GooglePlay Services
Google Analytics
Cloud Messaging
Google Maps
Google Nearby
Google Fit
Android Wear
Google Location
Activity Recognition
GooglePlay Services & Gradle
compile 'com.google.android.gms:play-services-fitness:7.3.0'
compile 'com.google.android.gms:play-services-wearable:7.3.0'
compile 'com.google.android.gms:play-services:7.3.0'
yerine
Güç Yönetimi
WakeLock
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
WakeLock
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

PowerManager.WakeLock wakeLock =
powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,

"WakelockTag");

wakeLock.acquire();
<uses-permission android:name="android.permission.WAKE_LOCK" />
Etkin Pil Kullanımı - 1
Şarj Seviyesini Kontrol Edin
4G > 3G > Wifi > 2G (Tüketim)
Transfer edebildiğiniz kadar data transfer edin
Data bağlantı kontrolu yapın
Polling vs GCM
Etkin Pil Kullanımı - 2
AlarmManager.setInexactRepeating()
ELAPSED_REALTIME vs ELAPSED_REALTIME_WAKEUP
Caching
Koyu renkler daha az enerji harcar
Hassas konum bilgisi (GPS)

More Related Content

Viewers also liked

Testailua vaan
Testailua vaanTestailua vaan
Testailua vaanTenttu
 
Study effects of various dosage of polypropylene fiber and different dosage o...
Study effects of various dosage of polypropylene fiber and different dosage o...Study effects of various dosage of polypropylene fiber and different dosage o...
Study effects of various dosage of polypropylene fiber and different dosage o...eSAT Publishing House
 
An intelligent hybrid control for paper machine
An intelligent hybrid control for paper machineAn intelligent hybrid control for paper machine
An intelligent hybrid control for paper machineeSAT Publishing House
 
Bounds on double domination in squares of graphs
Bounds on double domination in squares of graphsBounds on double domination in squares of graphs
Bounds on double domination in squares of graphseSAT Publishing House
 
Deber de informatica
Deber de informaticaDeber de informatica
Deber de informaticakelvinmaster4
 
8/22 國際研習會簡報_workshop presentation
8/22 國際研習會簡報_workshop presentation8/22 國際研習會簡報_workshop presentation
8/22 國際研習會簡報_workshop presentationCDRI_snowshih
 
Comment choisir le meilleur prestataire pour votre projet immobilier
Comment choisir le meilleur prestataire pour votre projet immobilierComment choisir le meilleur prestataire pour votre projet immobilier
Comment choisir le meilleur prestataire pour votre projet immobilierWinnie NDJOCK
 

Viewers also liked (12)

Naac new
Naac newNaac new
Naac new
 
Testailua vaan
Testailua vaanTestailua vaan
Testailua vaan
 
Study effects of various dosage of polypropylene fiber and different dosage o...
Study effects of various dosage of polypropylene fiber and different dosage o...Study effects of various dosage of polypropylene fiber and different dosage o...
Study effects of various dosage of polypropylene fiber and different dosage o...
 
An intelligent hybrid control for paper machine
An intelligent hybrid control for paper machineAn intelligent hybrid control for paper machine
An intelligent hybrid control for paper machine
 
Bounds on double domination in squares of graphs
Bounds on double domination in squares of graphsBounds on double domination in squares of graphs
Bounds on double domination in squares of graphs
 
Pinetree concept
Pinetree conceptPinetree concept
Pinetree concept
 
dangers of job hazards
dangers of job hazardsdangers of job hazards
dangers of job hazards
 
Deber de informatica
Deber de informaticaDeber de informatica
Deber de informatica
 
8/22 國際研習會簡報_workshop presentation
8/22 國際研習會簡報_workshop presentation8/22 國際研習會簡報_workshop presentation
8/22 國際研習會簡報_workshop presentation
 
Book of Life
Book of LifeBook of Life
Book of Life
 
Comment choisir le meilleur prestataire pour votre projet immobilier
Comment choisir le meilleur prestataire pour votre projet immobilierComment choisir le meilleur prestataire pour votre projet immobilier
Comment choisir le meilleur prestataire pour votre projet immobilier
 
30 Km
30 Km30 Km
30 Km
 

Similar to Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama

Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
Ceyhun Erturk Rasperry Pi
Ceyhun Erturk Rasperry PiCeyhun Erturk Rasperry Pi
Ceyhun Erturk Rasperry PiCeyhun Erturk
 
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakNginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakUğur Özyılmazel
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaHüseyin Mert
 
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Ali Erdinc Koroglu
 
Mutant Web Applications
Mutant Web ApplicationsMutant Web Applications
Mutant Web Applicationsguest096801
 
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14,  Suleyman OzarslanWAF atlatma yontemleri, Hacktrick14,  Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14, Suleyman OzarslanSüleyman Özarslan
 
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziPig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziHakan Ilter
 
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ ProgramlamaOguzhan Coskun
 
Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah Kahraman
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciSinan Bozkuş
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin AtlatılmasıMobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin AtlatılmasıBGA Cyber Security
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı GözleyelimOguz Yarimtepe
 

Similar to Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama (20)

Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
Ceyhun Erturk Rasperry Pi
Ceyhun Erturk Rasperry PiCeyhun Erturk Rasperry Pi
Ceyhun Erturk Rasperry Pi
 
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını KoşturmakNginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
 
Extjs 4 education
Extjs 4 educationExtjs 4 education
Extjs 4 education
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
 
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
 
Mutant Web Applications
Mutant Web ApplicationsMutant Web Applications
Mutant Web Applications
 
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14,  Suleyman OzarslanWAF atlatma yontemleri, Hacktrick14,  Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
 
.Net ile yazılım güvenliği
.Net ile yazılım güvenliği.Net ile yazılım güvenliği
.Net ile yazılım güvenliği
 
Asp.net ajax
Asp.net ajaxAsp.net ajax
Asp.net ajax
 
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri AnaliziPig ve Hive ile Hadoop üzerinde Veri Analizi
Pig ve Hive ile Hadoop üzerinde Veri Analizi
 
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ Programlama
 
Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI Emrah KAHRAMAN - Java RMI
Emrah KAHRAMAN - Java RMI
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
Docker İle Web Hosting
Docker İle Web HostingDocker İle Web Hosting
Docker İle Web Hosting
 
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin AtlatılmasıMobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
Mobil Uygulama Güvenlik Testlerinde Sertifika Sabitleme Özelliğinin Atlatılması
 
ADD14
ADD14ADD14
ADD14
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
 

Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama