SlideShare a Scribd company logo
1 of 10
Exploding head issues May collection
Be careful with Threads What’s wrong with that code? 2 publicclass Main extends Activity { private Thread t = new Thread() { publicvoid run() { doWork();         }; }     ... }
Они только и ждут, чтобы подставить тебя 	Этот код приведет к лику всей активити и всего, на что она ссылается.Утечка происходит из-за добавления Thread в ThreadGroup при его создании. http://code.google.com/p/android/issues/detail?id=7979 3
Всегда закрывайте файловые потоки 4 privatevoidreadFromFile(String filename)  throwsFileNotFoundException, IOException{         File f = new File(filename); InputStreaminputStream = null; try { inputStream = newFileInputStream(f); //do read operations         } finally { if (inputStream != null) { try { inputStream.close();                 } catch (IOException e) { //Log or ignore                 }             }         }     }
иначе 	Ваш процесс прибьют, как только пользователь решит примонтировать SD-Карту. 5
МЕНЮ 	Никогда, если не преследуете особой цели, не перекрывайте метод onMenuItemSelected() Activity. Существуют два специальных метода onOptionsItemSelected() и onContextItemSelected(). 6
Pending intent 7 privatevoidpostNotification(Intent intent) {         ...         Context context = getApplicationContext(); CharSequencecontentTitle = "My notification"; CharSequencecontentText = "Hello World!"; PendingIntentcontentIntent = PendingIntent.getActivity(this, 0, intent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify(NOTIFICATION_ID, notification);     }
PENDING INTENT FLAGS 8 	Если не хотите получить непрадсказуемое поведение, всегда обращайте внимание на флаги у PendingIntent
EXCESS SCROLL ON SAMSUNG LISTVIEW 	Производители могут легко вносить изменения в базовые классы платформы. Если вы добавляете «свое» поведение, перекрывая один из методов компонента, будьте готовы, что ваше решение может провалиться на некоторых девайсах. Например, это касается практически всех реализаций pull-to-refresh, что я видел. 9
СПАСИБО Презентацию подготовил  Шауберт Александр  shaubert.alexander@gmail.com Специально для Android May Days 2011 10

More Related Content

What's hot

MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. RussianRawan Qurmet
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»e-Legion
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Володимир Семенякін “Demiurg. Приручення заліза”
Володимир Семенякін “Demiurg. Приручення заліза”Володимир Семенякін “Demiurg. Приручення заліза”
Володимир Семенякін “Demiurg. Приручення заліза”Lviv Startup Club
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключенийphearnot
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptionsolegol
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”SQALab
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерSergey Platonov
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyVladimir Kochetkov
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
 

What's hot (14)

MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Bytecode
BytecodeBytecode
Bytecode
 
Володимир Семенякін “Demiurg. Приручення заліза”
Володимир Семенякін “Demiurg. Приручення заліза”Володимир Семенякін “Demiurg. Приручення заліза”
Володимир Семенякін “Demiurg. Приручення заліза”
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключений
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
 
Григорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптерГригорий Демченко, Универсальный адаптер
Григорий Демченко, Универсальный адаптер
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 

Similar to Exploding Head Issues

Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...
Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...
Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...Александр Шамрай
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Yulia Tsisyk
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»MskDotNet Community
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsCiklum
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... кодеTatyanazaxarova
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
SECON'2016. Приходько Артём, Модульное JavaScript приложение
SECON'2016. Приходько Артём, Модульное JavaScript приложениеSECON'2016. Приходько Артём, Модульное JavaScript приложение
SECON'2016. Приходько Артём, Модульное JavaScript приложениеSECON
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''DneprCiklumEvents
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4Radik Fattakhov
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 

Similar to Exploding Head Issues (20)

Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...
Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...
Диагностика проблем в промышленной среде с помощью Intelli Trace и Visual Stu...
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_Antipatterns
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
По колено в Си++ г... коде
По колено в Си++ г... кодеПо колено в Си++ г... коде
По колено в Си++ г... коде
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
SECON'2016. Приходько Артём, Модульное JavaScript приложение
SECON'2016. Приходько Артём, Модульное JavaScript приложениеSECON'2016. Приходько Артём, Модульное JavaScript приложение
SECON'2016. Приходько Артём, Модульное JavaScript приложение
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Master class bars group ext js4
Master class bars group   ext js4Master class bars group   ext js4
Master class bars group ext js4
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
Lec 1
Lec 1Lec 1
Lec 1
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 

Exploding Head Issues

  • 1. Exploding head issues May collection
  • 2. Be careful with Threads What’s wrong with that code? 2 publicclass Main extends Activity { private Thread t = new Thread() { publicvoid run() { doWork(); }; } ... }
  • 3. Они только и ждут, чтобы подставить тебя Этот код приведет к лику всей активити и всего, на что она ссылается.Утечка происходит из-за добавления Thread в ThreadGroup при его создании. http://code.google.com/p/android/issues/detail?id=7979 3
  • 4. Всегда закрывайте файловые потоки 4 privatevoidreadFromFile(String filename) throwsFileNotFoundException, IOException{ File f = new File(filename); InputStreaminputStream = null; try { inputStream = newFileInputStream(f); //do read operations } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { //Log or ignore } } } }
  • 5. иначе Ваш процесс прибьют, как только пользователь решит примонтировать SD-Карту. 5
  • 6. МЕНЮ Никогда, если не преследуете особой цели, не перекрывайте метод onMenuItemSelected() Activity. Существуют два специальных метода onOptionsItemSelected() и onContextItemSelected(). 6
  • 7. Pending intent 7 privatevoidpostNotification(Intent intent) { ... Context context = getApplicationContext(); CharSequencecontentTitle = "My notification"; CharSequencecontentText = "Hello World!"; PendingIntentcontentIntent = PendingIntent.getActivity(this, 0, intent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify(NOTIFICATION_ID, notification); }
  • 8. PENDING INTENT FLAGS 8 Если не хотите получить непрадсказуемое поведение, всегда обращайте внимание на флаги у PendingIntent
  • 9. EXCESS SCROLL ON SAMSUNG LISTVIEW Производители могут легко вносить изменения в базовые классы платформы. Если вы добавляете «свое» поведение, перекрывая один из методов компонента, будьте готовы, что ваше решение может провалиться на некоторых девайсах. Например, это касается практически всех реализаций pull-to-refresh, что я видел. 9
  • 10. СПАСИБО Презентацию подготовил Шауберт Александр shaubert.alexander@gmail.com Специально для Android May Days 2011 10