Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- unreal
- Activity 수명 주기
- Google Cloud Messasging
- NSURLConnection
- 페이스북
- GCM
- HTTP
- Android O
- android studio
- gradle
- Push
- Google Cloud Messasing
- 안드로이드 개발 레벨업 교과서
- signing
- service
- In-app Billing
- AccountManager
- Unchecked Exception
- 배포
- contentprovider
- Android
- 카카오톡
- 트위터
- Android O Preview
- ios9
- 데이터 공유
- BLOCK
- xcode
- ios
- 다른 앱에서 열기
Archives
- Today
- Total
노블의 개발이야기
[Android] Android O 기기에서 실행되는 모든 앱에 영향을 미치는 주요 변경사항 본문
Android O는 Android 플랫폼을 변경한 것이며, 이러한 변경은 targetSdkVersion을 변경하지 않더라도 앱 동작에 영향을 미치거나 앱을 완전히 중단시킬 수 있습니다.
Android O 기기에서 실행되는 모든 앱에 영향을 미치는 주요 변경사항
1. 백그라운드 위치 업데이트 빈도가 더 적음
앱이 백그라운드 서비스로부터 위치 업데이트를 수신하는 경우, 이전 버전의 Android에 비해 Android O는 업데이트 수신 빈도가 더 적습니다.
* 백그라운드 서비스는 위치 업데이트를 시간당 몇 번 이상 수신할 수 없습니다.
* 앱이 포어그라운드에 있을 때는 위치 업데이트 빈도가 영향을 받지 않습니다.
2. net.hostname이 더 이상 지원되지 않음
net.hostname 시스템 속성을 쿼리하면 null 결과가 발생합니다.
public static String getHostNameFromBuildClass() {
try {
Method getString =Build.class.getDeclaredMethod("getString", String.class);
getString.setAccessible(true);
return getString.invoke(null, "net.hostname").toString();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
public static String getHostNameFromSystemProperties() {
// String str = SystemProperties.get("net.hostname");
try {
Class<?> clz = Class.forName("android.os.SystemProperties");
Method get = clz.getMethod("get", String.class);
return (String) get.invoke(clz, "net.hostname");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
...
Log.d(TAG, "Host Name From Build.class: " + getHostNameFromBuildClass());
Log.d(TAG, "Host Name From SystemProperties: " + getHostNameFromSystemProperties());
...
// Android 7.0 API 24 :
// Host Name From Build.class: android-7b3144b3f9dafa97
// Host Name From SystemProperties: android-7b3144b3f9dafa97
// Android O Preview :
// Host Name From Build.class: unknown
// Host Name From SystemProperties:
위 두가지 메소드로 테스트해봤을 때 null 이 아닌 “unknown” 또는 “”이 리턴된다.
3. send(DatagramPacket)의 새로운 예외
connect(InetAddress, int) 메서드가 실패한 경우 send(DatagramPacket) 메서드가 SocketException을 발생시킵니다.
4. AbstractCollection 메서드의 적절한 NullPointException
AbstractCollection.removeAll(null) 및 AbstraceCollection.retainAll(null)은 항상 NullPointerException을 발생시킵니다.
이전에는 컬렉션이 비어있을 때는 NullPointException이 발생하지 않았습니다.
public class CollectionTest {
@Test
public void removeAll() throws Exception {
ArrayList<String> list = new ArrayList<>();
// list.add("a"); // list에 데이터가 있으면 API 24 이하에서는 NullPointException이 발생하지 않습니다.
list.removeAll(null);
}
@Test
public void retainAll() throws Exception {
ArrayList<String> list = new ArrayList<>();
// list.add("a"); // list에 데이터가 있으면 API 24 이하에서는 NullPointException이 발생하지 않습니다.
list.retainAll(null);
}
}
- Android 7.0 API 24 :
- 컬렉션이 비어있을 때 - NullPointException
- 컬렉션이 비어있지 않을 때 -
성공
- Android O Preview :
- 컬렉션이 비어있을 때 - NullPointException
- 컬렉션이 비어있지 않을 때 - NullPointException
5. Currency.getDisplayName(null)의 적절한 NullPointException
Currenty.getDisplayName(null)을 호출하면 NullPointException이 발생합니다.
Currency currency = Currency.getInstance(Locale.getDefault());
currency.getDisplayName(null);
- Android 7.0 API 24 :
- Result: “대한민국 원”
- Android O Preview :
- Result: NullPointException
'Android' 카테고리의 다른 글
[Android] Service (0) | 2017.08.01 |
---|---|
[Android] UriMatcher (0) | 2017.07.24 |
Bintray(jCenter)에 Android Library(.aar)을 배포 (0) | 2017.07.20 |
[Android] Android O - Background Execution Limits (0) | 2017.07.13 |
[Android] Context란? (7) | 2017.07.12 |
Comments