Skip to content

Commit dfd0685

Browse files
yemreakgitbook-bot
authored andcommitted
GitBook: [master] 8 pages and 13 assets modified
1 parent 7517488 commit dfd0685

21 files changed

+136
-91
lines changed

.gitbook/assets/app_bar_menus2.png

171 KB
Loading

.gitbook/assets/appbar_menus.png

35.4 KB
Loading
78.5 KB
Loading

.gitbook/assets/dao_hand.png

53.5 KB
Loading

.gitbook/assets/entity_hand.png

69.3 KB
Loading

.gitbook/assets/menus_types.png

82.6 KB
Loading
105 KB
Loading

.gitbook/assets/room_repo_hand.png

143 KB
Loading

.gitbook/assets/room_vh_hand.png

71.3 KB
Loading

.gitbook/assets/roomdb_hand.png

65.8 KB
Loading

.gitbook/assets/roomdb_schema.png

47.4 KB
Loading

.gitbook/assets/sqlite_hand.png

72.8 KB
Loading

.gitbook/assets/syncronized.png

94 KB
Loading

SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
* [🌄 Arkaplan'da Çalışma](arkaplan/README.md)
2828
* [🌠 MultiThreading](arkaplan/multithreading.md)
2929
* [💫 Asenkron İşlemler](arkaplan/asynctask-ve-asynctaskloader.md)
30+
* [🔁 AsyncTask](arkaplan/asynctask.md)
3031
* [🪐 Servisler](arkaplan/android-servisleri.md)
3132
* [🌞 Foreground Service](arkaplan/foreground-service.md)
3233
* [⏰ Alarm](arkaplan/alarm.md)

arkaplan/asynctask-ve-asynctaskloader.md

+2-85
Original file line numberDiff line numberDiff line change
@@ -35,95 +35,12 @@ Android'teki tüm görüntü işlemlerinin yapıldı alandır.
3535
* UI Thread sadece görsel işlemler için kullanılmalıdır
3636
* Tüm işlemler 16ms'den kısa bir sürede tamamlanmalıdır
3737

38+
![](../.gitbook/assets/async_task_ui_thread.png)
39+
3840
{% hint style="danger" %}
3941
Yaklaşık olarak 5s'den uzun süren işlemler "[application not responding](http://developer.android.com/guide/practices/responsiveness.html)" \(ANR\) diyaloğunu oluşturur ve kullanıcı bunu görmesi durumunda uygulamayı kapatıp, siler 😥
4042
{% endhint %}
4143

42-
## 🔁 AsyncTask
43-
44-
Verilen işlemi arkaplanda, sistemi bloklamadan tamamlar.
45-
46-
* Yapılandırma ayarlarından etkilenir, işlem yok edilip yeniden başlatılır
47-
* Telefonu döndürme vs gibi işlemler yapılandırma ayarlarını değiştirir
48-
* Aynı işlemin çokça yapılması RAM tüketimini arttırır
49-
* Uygulama kapatıldığında cancel\(\) metodu çalıştırılmadığı sürece çalışmaya devam eder
50-
51-
{% hint style="warning" %}
52-
Önemli ve kritik işlemler için `AsyncTaskLoader` tercih edilir
53-
{% endhint %}
54-
55-
{% tabs %}
56-
{% tab title="🎈 Kullanım" %}
57-
| 💠 Metot | 📜 Açıklama |
58-
| :--- | :--- |
59-
| `onPreExecute()` | İşlem tamamlanmadan önce ara ara çağrılan metottur, genellikle % dolum bilgisi vermek için kullanılır |
60-
| `doInBackground(Params...)` | `onPreExecute()` metodu bittiği an çalışır, arkaplan işlemlerini yapan kısımdır. `publishProgress()` metodu ile değişikleri UI Thread'e aktarır. Bittiğinde `onPostExecure()` metoduna sonucu aktarır. |
61-
| `onProgressUpdate(Progress...)` | `publishProgress()` metodundan sonra çalışır, genellikle raporlama veye ilerleme adımlarını kullanıcıya göstermek için kullanılır |
62-
| `onPostExecute(Result)` | Arkaplan işlemi tamamlandığında sonuç buraya aktarılır, UI Thread bu metot üzerinden sonucu kullanır. |
63-
64-
{% hint style="warning" %}
65-
`onProgressUpdate` metodunda tüm adımları ele alırsanız, asenkron çalışma yapısı bozulur ve senkronize olarak çalışır
66-
{% endhint %}
67-
{% endtab %}
68-
69-
{% tab title="🧱 Prototip" %}
70-
```java
71-
public class MyAsyncTask extends AsyncTask <String, Void, Bitmap>{}
72-
```
73-
74-
* `String` değişkeni, `doInBackground` metoduna aktarılacak verilerdir
75-
* `Void` yapısı, `publishProgress` ve `onProgressUpdate` metotlarının kullanılmayacağını belirtir
76-
* `Bitmap` tipi de, `onPostExecute` ile aktarılan işlem sonucunun tipini belirtir
77-
78-
{% hint style="warning" %}
79-
Son iki parametre \(`Void` ve `Bitmap`\) dışarıdan verilmez, sınıf içi parametrelerdir
80-
{% endhint %}
81-
{% endtab %}
82-
83-
{% tab title="❌ İşlemi İptal Etme" %}
84-
İşlemi istediğin zaman [`cancel()`](https://developer.android.com/reference/android/os/AsyncTask.html#cancel%28boolean%29) metodu ile iptal edebilirsin
85-
86-
* [`cancel()`](https://developer.android.com/reference/android/os/AsyncTask.html#cancel%28boolean%29) metodu işlem tamamlanmışsa `False` döndürür
87-
* Biten işlemi iptal edemezsin 🙄
88-
* İşlemin iptal edilme durumunu `doInBackground` metodunda `isCancalled()` metodu kontrol etmemiz gerekmektedir
89-
* İşlem iptal edildiğin `doInBackground` metodundan sonra `onPostExecute` yerine [`onCancelled(Object)`](https://developer.android.com/reference/android/os/AsyncTask.html#onCancelled%28Result%29) metodu döndürülür
90-
91-
{% hint style="info" %}
92-
Varsayılan olarak [`onCancelled(Object)`](https://developer.android.com/reference/android/os/AsyncTask.html#onCancelled%28Result%29) metodu `onCancelled()` metodunu çağırır, sonuç görmezden gelinir.
93-
{% endhint %}
94-
{% endtab %}
95-
96-
{% tab title="👨‍💻 Kod" %}
97-
```java
98-
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
99-
protected Long doInBackground(URL... urls) {
100-
int count = urls.length;
101-
long totalSize = 0;
102-
for (int i = 0; i < count; i++) {
103-
totalSize += Downloader.downloadFile(urls[i]);
104-
publishProgress((int) ((i / (float) count) * 100));
105-
// Escape early if cancel() is called
106-
if (isCancelled()) break;
107-
}
108-
return totalSize;
109-
}
110-
111-
protected void onProgressUpdate(Integer... progress) {
112-
// 0. eleman en son adımı belirtir. (FIFO)
113-
setProgressPercent(progress[0]);
114-
}
115-
116-
protected void onPostExecute(Long result) {
117-
showDialog("Downloaded " + result + " bytes");
118-
}
119-
}
120-
121-
// UI Thread'te kullanımı
122-
new DownloadFilesTask().execute(url1, url2, url3);
123-
```
124-
{% endtab %}
125-
{% endtabs %}
126-
12744
## 🔗 Harici Bağlantılar
12845

12946
{% embed url="https://google-developer-training.github.io/android-developer-fundamentals-course-concepts-v2/unit-3-working-in-the-background/lesson-7-background-tasks/7-1-c-asynctask-and-asynctaskloader/7-1-c-asynctask-and-asynctaskloader.html" %}

arkaplan/asynctask.md

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# 🔁 AsyncTask
2+
3+
## 🎈 Ne için Kullanılır
4+
5+
* 🕊️ Verilen işlemi arka planda, sistemi işlerini engellemeden tamamlar.
6+
* 🐞 Yapılandırma ayarlarından etkilenir, işlem yok edilip yeniden başlatılır
7+
* 💫 Telefonu döndürme vs gibi işlemler yapılandırma ayarlarını değiştirir
8+
* 🗑️ Aynı işlemin çokça yapılması RAM tüketimini arttırır
9+
* 🌃 Uygulama kapatıldığında `cancel()` metodu çalıştırılmadığı sürece çalışmaya devam eder
10+
11+
{% hint style="warning" %}
12+
Önemli ve kritik işlemler için `AsyncTaskLoader` tercih edilir
13+
{% endhint %}
14+
15+
## 🐣 Kullanım Metotları
16+
17+
![](../.gitbook/assets/async_task_worker_thread.png)
18+
19+
| 💠 Metot | 📜 Açıklama |
20+
| :--- | :--- |
21+
| `onPreExecute()` | İşlem tamamlanmadan önce ara ara çağrılan metottur, genellikle % dolum bilgisi vermek için kullanılır |
22+
| `doInBackground(Params...)` | `onPreExecute()` metodu bittiği an çalışır, arkaplan işlemlerini yapan kısımdır. `publishProgress()` metodu ile değişikleri UI Thread'e aktarır. Bittiğinde `onPostExecure()` metoduna sonucu aktarır. |
23+
| `onProgressUpdate(Progress...)` | `publishProgress()` metodundan sonra çalışır, genellikle raporlama veye ilerleme adımlarını kullanıcıya göstermek için kullanılır |
24+
| `onPostExecute(Result)` | Arkaplan işlemi tamamlandığında sonuç buraya aktarılır, UI Thread bu metot üzerinden sonucu kullanır. |
25+
26+
{% hint style="warning" %}
27+
`onProgressUpdate` metodunda tüm adımları ele alırsanız, asenkron çalışma yapısı bozulur ve senkronize olarak çalışır
28+
{% endhint %}
29+
30+
## 🧱 Prototip
31+
32+
![](../.gitbook/assets/async_task.png)
33+
34+
```java
35+
public class MyAsyncTask extends AsyncTask <String, Void, Bitmap>{}
36+
```
37+
38+
* 🏹`String` değişkeni, `doInBackground` metoduna aktarılacak verilerdir
39+
* 🌌`Void` yapısı, `publishProgress` ve `onProgressUpdate` metotlarının kullanılmayacağını belirtir
40+
* 🔸`Bitmap` tipi de, `onPostExecute` ile aktarılan işlem sonucunun tipini belirtir
41+
42+
![](../.gitbook/assets/async_task_prototype.png)
43+
44+
{% hint style="warning" %}
45+
Son iki parametre \(`Void` ve `Bitmap`\) dışarıdan verilmez, sınıf içi parametrelerdir
46+
{% endhint %}
47+
48+
## ❌ İşlemi İptal Etme
49+
50+
* 🚫 İşlemi istediğin zaman [`cancel()`](https://developer.android.com/reference/android/os/AsyncTask.html#cancel%28boolean%29) metodu ile iptal edebilirsin
51+
* 🔙 [`cancel()`](https://developer.android.com/reference/android/os/AsyncTask.html#cancel%28boolean%29) metodu işlem tamamlanmışsa `False` döndürür
52+
* 🙄 Biten işlemi iptal edemezsin
53+
* 👮‍♂️ İşlemin iptal edilme durumunu `doInBackground` metodunda `isCancalled()` metodu kontrol etmemiz gerekmektedir
54+
* ❣️ İşlem iptal edildiğin `doInBackground` metodundan sonra `onPostExecute` yerine [`onCancelled(Object)`](https://developer.android.com/reference/android/os/AsyncTask.html#onCancelled%28Result%29) metodu döndürülür
55+
56+
{% hint style="info" %}
57+
Varsayılan olarak [`onCancelled(Object)`](https://developer.android.com/reference/android/os/AsyncTask.html#onCancelled%28Result%29) metodu `onCancelled()` metodunu çağırır, sonuç görmezden gelinir.
58+
{% endhint %}
59+
60+
## 👨‍💻 Kod
61+
62+
```java
63+
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
64+
protected Long doInBackground(URL... urls) {
65+
int count = urls.length;
66+
long totalSize = 0;
67+
for (int i = 0; i < count; i++) {
68+
totalSize += Downloader.downloadFile(urls[i]);
69+
publishProgress((int) ((i / (float) count) * 100));
70+
// Escape early if cancel() is called
71+
if (isCancelled()) break;
72+
}
73+
return totalSize;
74+
}
75+
76+
protected void onProgressUpdate(Integer... progress) {
77+
// 0. eleman en son adımı belirtir. (FIFO)
78+
setProgressPercent(progress[0]);
79+
}
80+
81+
protected void onPostExecute(Long result) {
82+
showDialog("Downloaded " + result + " bytes");
83+
}
84+
}
85+
86+
// UI Thread'te kullanımı
87+
new DownloadFilesTask().execute(url1, url2, url3);
88+
```
89+

gui/component-isimleri.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ description: Component olarak adlandırılan Android bileşenlerinin isimleri ye
66

77
## 🔂 Inputlar
88

9-
![ User input controls](https://google-developer-training.github.io/android-developer-fundamentals-course-concepts-v2/images/4-2-c-input-controls/user_input_controls_composite.png)
9+
![](../.gitbook/assets/name_inputs.png)
1010

1111
In the figure above:
1212

@@ -19,11 +19,21 @@ In the figure above:
1919

2020
## 🍢 Seek Bar
2121

22+
![](../.gitbook/assets/name_seekbar.png)
23+
2224
## ⚫ Progress Bar
2325

26+
![](../.gitbook/assets/name_progressbar.png)
27+
2428
## 🔀 Navigation Bar
2529

30+
![](../.gitbook/assets/name_navbar.png)
31+
2632
## 🕎 Navigation View
2733

34+
![](../.gitbook/assets/name_navview.png)
35+
2836
## 💬 Alert Dialog
2937

38+
![](../.gitbook/assets/name_alert_dialog.png)
39+

gui/menu.md

+6
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,24 @@
77
* 🍢 Contextual Action Bar
88
* 🎈 Popup
99

10+
![](../.gitbook/assets/menus_types.png)
11+
1012
## ⚙️ App bar ve Option Menu
1113

1214
1. 🏹 Navigation
1315
2. 🔤 Title
1416
3. 🏃‍♂️ Actions
1517
4. 🗃️ Overflow
1618

19+
![](../.gitbook/assets/appbar_menus.png)
20+
1721
1. 🍢 App bar
1822
2. 🏃‍♂️ Action icons
1923
3. 🎛️ Overflow Button
2024
4. 🗃️ Overflow menu
2125

26+
![](../.gitbook/assets/app_bar_menus2.png)
27+
2228
## 📦 Bağımlılıkları Dahil Etme
2329

2430
```groovy

haberlesme/internete-baglanma.md

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## ✍ El Notlarım
44

5+
![](../.gitbook/assets/connect_internet_hand.png)
6+
57
## 👮‍♂️ Gerekli İzinlerin Alınması
68

79
* 📃 `AndroidManifest.xml` dosyası üzerinden internet izni alınmalıdır

veriler/room-database.md

+16
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,17 @@ dependencies {
4242

4343
## 🧱 Temel Yapı
4444

45+
![](../.gitbook/assets/roomdb_schema.png)
46+
4547
## ⭐ Entity Yapısı
4648

4749
* 🧱 DB'ye aktarılacak sütun isimlerini temsil ederler
4850
* 🏷️ [Annotation](https://www.geeksforgeeks.org/annotations-in-java/) yapısı ile özellikleri belirlenir
4951
* 🔸 Tablodaki sütün isimleri entity üzerindeki değişkenlerle temsil edilir
5052
* 👮‍♂️ **Primary key** ve **Entity** etiketini eklemek zorunludur
5153

54+
![](../.gitbook/assets/entity_hand.png)
55+
5256
```java
5357
@Entity(tableName = "word_table")
5458
public class Word {
@@ -98,6 +102,8 @@ public class Word {
98102

99103

100104

105+
![](../.gitbook/assets/dao_hand.png)
106+
101107
```java
102108
@Dao
103109
public interface WordDao {
@@ -139,6 +145,8 @@ public interface WordDao {
139145
* `version` alanında db'nin en son sürümünü belirtin
140146
* 🐛 Versiyon geçişleri arasındaki sorunları engellemek için `fallbackToDestructiveMigration()` özelliği eklenir
141147

148+
![](../.gitbook/assets/roomdb_hand.png)
149+
142150
```java
143151
@Database(entities = {Word.class}, version = 1)
144152
public abstract class WordRoomDatabase extends RoomDatabase {
@@ -177,6 +185,8 @@ public abstract class WordRoomDatabase extends RoomDatabase {
177185
* Birden fazla Thread gelmesi durumunda engellemek için **synchronized** anahtar kelimesi kullanılır
178186
* ✨ Gereksiz Thread engelinden sakınmak için, synchronized yapısı içerisinde tekrardan **if kontrolü** yapılmalıdır
179187

188+
![](../.gitbook/assets/syncronized.png)
189+
180190
{% hint style="info" %}
181191
👀 Detaylar için [Multi-threading](../arkaplan/multithreading.md) alanına bakabilirsin.
182192
{% endhint %}
@@ -190,6 +200,8 @@ public abstract class WordRoomDatabase extends RoomDatabase {
190200
* 🦄 Verilerin aktarımı bir defaya mahsus **Constructor** üzerinde yapılır
191201
* 🌠 Verilerin aktarılması **asenkron** olması gerektiğinden [AsyncTask](../arkaplan/asynctask-ve-asynctaskloader.md) yapısı kullanılır
192202

203+
![](../.gitbook/assets/room_repo_hand.png)
204+
193205
```java
194206
public class WordRepository {
195207

@@ -238,6 +250,8 @@ public class WordRepository {
238250
* 🥚 Context verisi miras alınmalıdır
239251
* 📝 UI ile alakalı bilgilerin kaydı ile uğraşır
240252

253+
![](../.gitbook/assets/room_vh_hand.png)
254+
241255
```java
242256
public class WordViewModel extends AndroidViewModel {
243257

@@ -268,6 +282,8 @@ public class WordViewModel extends AndroidViewModel {
268282
* [🛳️ DAO](room-database.md#dao-yapisi)
269283
* [🛍️ ViewHolder](room-database.md#viewholder)
270284

285+
![](../.gitbook/assets/room_livedata_hand.png)
286+
271287
```java
272288
wordsViewModel.getAllNews().observe(
273289
this,

veriler/sqlite.md

+9-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ description: Android üzerinde SQLite ile veri tabanı oluşturma
44

55
# 🗃️ SQLite
66

7-
### SQLite Giriş Temelleri
7+
## ✍ Yazılı Notlarım
8+
9+
![](../.gitbook/assets/sqlite_hand.png)
10+
11+
## 🧱 Temel İşlemler
812

913
İlk olarak try - catch yapısı kurulur ve olası sorunda programın kapanması engellenir.
1014

@@ -19,7 +23,7 @@ catch (e : Exception){
1923

2024
> Bütün kodları `...` olan yere yazacağız. Artık başlayabiliriz.
2125
22-
### SQLite ile Basit DB Oluşturma
26+
## 🏗️ Basit DB Oluşturma
2327

2428
`database = openOrCreateDatabase("Datas", Context.MODE_PRIVATE, null)`
2529

@@ -29,7 +33,7 @@ catch (e : Exception){
2933
* \(Context.MODE yazıp ALT+ SPACE yaparsanız detaylar çıkacaktır karşınıza\)
3034
* null : CursorFactory
3135

32-
### SQLite DB Oluşturma Kodları
36+
## 👨‍💻 DB Oluşturma Kodları
3337

3438
```text
3539
try {
@@ -47,7 +51,7 @@ try {
4751
* `VARCHAR` char
4852
* `INT` Int
4953

50-
### SQLite DB İşlemleri Değiştirme
54+
## 👨‍🔧 DB İşlemleri Değiştirme
5155

5256
Temel yapısı `database.execSQL("...")` şeklindedir.
5357

@@ -72,7 +76,7 @@ database.execSQL("SELECT FROM datas WHERE name LIKE '%u%") // içinde 'u' harfi
7276
* `'Yunus'` VARCHAR \(string\) tipindeki veri
7377
* `21` INT\(2\) \(Int\) tipindeki veri
7478

75-
### SQLite DB Okuma
79+
## 👀 DB Okuma
7680

7781
```text
7882
if (database != null) {

0 commit comments

Comments
 (0)