10
EXPLODING HEAD ISSUES MAY COL LECTION

Exploding Head Issues

Embed Size (px)

Citation preview

Page 1: Exploding Head Issues

EXPLODIN

G HEAD IS

SUES

MA

Y C

OL L E

CT

I ON

Page 2: Exploding Head Issues

BE CAREFUL WITH THREADS

What’s wrong with that code?

2

public class Main extends Activity { private Thread t = new Thread() { public void run() { doWork(); }; }

...}

Page 3: Exploding Head Issues

ОНИ ТОЛЬКО И ЖДУТ, ЧТОБЫ ПОДСТАВИТЬ ТЕБЯ

Этот код приведет к лику всей активити и всего, на что она ссылается. Утечка происходит из-за добавления Thread в ThreadGroup при его создании.

http://code.google.com/p/android/issues/detail?id=7979

3

Page 4: Exploding Head Issues

ВСЕГДА ЗАКРЫВАЙТЕ ФАЙЛОВЫЕ ПОТОКИ

4

private void readFromFile(String filename) throws FileNotFoundException, IOException { File f = new File(filename); InputStream inputStream = null; try { inputStream = new FileInputStream(f); //do read operations } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { //Log or ignore } } } }

Page 5: Exploding Head Issues

ИНАЧЕ

Ваш процесс прибьют, как только пользователь решит примонтировать SD-Карту.

5

Page 6: Exploding Head Issues

МЕНЮ

Никогда, если не преследуете особой цели, не перекрывайте метод onMenuItemSelected() Activity. Существуют два специальных метода onOptionsItemSelected() и onContextItemSelected().

6

Page 7: Exploding Head Issues

PENDING INTENT

7

private void postNotification(Intent intent) { ... Context context = getApplicationContext(); CharSequence contentTitle = "My notification"; CharSequence contentText = "Hello World!"; PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify(NOTIFICATION_ID, notification); }

Page 8: Exploding Head Issues

PENDING INTENT FLAGS

8

Если не хотите получить непрадсказуемое поведение, всегда обращайте внимание на флаги у PendingIntent

Page 9: Exploding Head Issues

EXCESS SCROLL ON SAMSUNG LISTVIEW

Производители могут легко вносить изменения в базовые классы платформы. Если вы добавляете «свое» поведение, перекрывая один из методов компонента, будьте готовы, что ваше решение может провалиться на некоторых девайсах. Например, это касается практически всех реализаций pull-to-refresh, что я видел.

9

Page 10: Exploding Head Issues

СПАСИБО

Презентацию подготовил

Шауберт Александр

[email protected]

Специально для Android May Days 2011

10