mvvm GitHubService 그래들 설정 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:cardview-v7:27.1.1' // http image implementation 'com.github.bumptech.glide:glide:3...
GitHubService Ex apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.neofuture.recyclerview1" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-androi..
11.ContentProvider를 알자 콘텐츠 제공자는 구조화된 데이터 세트의 액세스를 관리합니다. 데이터를 캡슐화하여 데이터 보안을 정의하는데 필요한 메커니즘을 제공하기도 합니다. 콘텐츠 제공자는 한 프로세서의 데이터에 다른 프로세스에서 실행 중인 코드를 연결하는 표준 인터페이스 입니다.콘텐츠 제공자 내의 데이터에 액세스 하고자 하는 경우, 애플리케이션의 Context에 있는 ContentResolver 객체가 제공자 객체와 통신하며, 이 객체는 ContentProvider를 구현하는 클래스의 인스턴스 입니다. 제공자는 클라이언트로 부터 데이터 요청을 받아 요청된 작업을 수행하고 결과를 반환합니다. ContentProvider를 안드로이드 애플리케이션에 일부이지고 데이터 작업을 위한 고유의 UI를 제..
10. IntentService를 활용하자 액티비티와 프래그먼트 수명주기에 의존하지 않고 백그라운드에서 처리하고 싶은 경우 일반적으로 IntentService가 최적의 선택이 됩니다. 여기서는 백그라운드로 벤치마크에서도 자주 이용되는 피보나치 수열을 계산하고, 그 결과를 LocalBroadcastReceiver를 통해 액티비티에 전달해 봅니다. 이용방법 IntentService 를 이용하는 클래스를 만든다 AndroidManifast.xml에 등록하면 됩니다. 안드로이드 스튜디오에 생성용 메뉴가 있으니깐 그걸 이용하도록 합시다. 그러면 AndroidManifast.xml 에 자동으로 등록 해줍니다. IntentService.onHandleIntent 는 워커 스레드로 실행되므로 이 안에서 계산을 처리하면..
9. 상주 서비스를 만들자 상주하는 서비스이 예로 간이 음악 플레이어를 만들겠습니다. 구현을 간단히 하고자 앱 내에 저장하기로 하고 음악 재생은 MediaPlayer 클래스로 합니다. 여기서는 음악의 재생과 정지라는 두 가지 기능만 구현 해봅시다. 음악 재생과 정지 MediaPlayer 인스턴스를 만들고 start()를 호출하면 음악이 재생됩니다. MediaPlayer.create()의 두번째 인수로 전달하는 R.raw.bensound_clearday 음악 파일 입니다. 음악 재생 MediaPlayer 클래스를 이용하기 위해 선언 한다. private MediaPlayer mPlayer; /** * 음악을 재생한다 */ public void play() { Log.d(TAG, "play"); mPlaye..
8. Service 종류와 수명주기를 이해하자 액티비티와 프래그먼트는 화면에 표시되는 동안은 생존하지만 표시되지 않게 되면면 onStop이나 onDestory가 호출되어 폐기될 가능성이 있습니다 다른 앱의 액티비티가 최상위에 오는 경우에도 백그라운드에서 처리를 계속하고 싶을 때는 어떻게 하면 좋을까요? 백그라운드 처리를 위해 준비된 컴포넌트가 Service 입니다. Service는 UI 없이 백그라운드로 처리를 수행하는 컴포넌트 입니다. Service의 종류와 수명주기를 이해 하자 Service는 크게 세 종류로 나눌 수 있습니니다. 첫번째는 Context.startService() 를 호출해 시작되는 서비스 입니다.두번째는 Context.bindService() 를 호출해서 Service에 바인드하는 ..
LocalBroadcastReceiver 를 이해하자 브로드캐스트는 다른 앱에 송신하는 것이 가능하지만 경우에 따라서는 다른 앱에 알릴 필요 없이 앱 내에서 완결시키고 싶을 때도 있습니다. 그럴 때는 로컬 브로드캐스트로 다른 앱에 알리지 않고 끝낼 수 있습니다. 로컬 브로드캐스트를 수신하려면 LocalBroadcastReceiver 를 이용합니다. 로컬 브로드캐스트는 다음에 설명할 Service와 조합해 이용하는 경우가 많습니다. Service 쪽에서 처리를 하고, 처리가 끝나면 액티비티나 프래그먼트에 로컬 브로드캐스트에 처리 완료를 알리는 식으로 사용합니다. 브로드캐스트를 수신해 처리할 때 주의할 점안드로이드는 전력 소비를 줄이고자 사용자가 화면을 끄면 슬립 상태로 들어갑니다. 브로드캐스트를 수신해서 ..
BroadcastReceiver로 브로드캐스트 이벤트를 수신하자 어떤 이벤트가 발생한 사실을 앱에 알리고 싶을 때 BroadcastReceiver에 통지 합니다. 시스템의 이벤트를 앱에 알리거나, 앱간에 연계를 위해 이벤트를 알리고 싶을 때, 또는 소켓통신을 이용한 프로그램을 만들 때 이용합니다. 기본을 이해하자 BroadcastReceiver는 Intent를 받았을 때의 처리를 onReceive에서 구현합니다. 어느 브로드캐스트 Intent를 받을지는 IntentFilter\fh wjddml gkqslek. public abstract void OnReceive(Content content, Intent, intent); 두 번째 인수로 전달되는 Intent 는 Context.sendBroadcast(..
UI를 갖지 않는 프래그먼트를 이용하자 이런 프래그먼트를 헤드리스 프래그먼트라고 합니다. 기본 액티비티를 클래스로서 BaseActivity를 만들고 거기에 액티비티의 공통된 처리를 구현하는 경우가 있습니다.그러한 공통 처리에서 UI이와 연결되지 않는 부분을 헤드리스 프래그먼트로서 구현할 수 있습니다. 여기에서는 네트워크 연결 확인 및 네트워크 연결 변경 감지를 프래그먼트로 구현 해보겠습니다 public class MainActivity extends AppCompatActivity { private NetworkCheckFragment mFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedI..
4. 중첩 프래그먼트를 이용하자 프래그먼트안에 프래그먼트를 넣는 중첩 프래그먼트에 대해 알아보자 중첩 프래그먼는 처음에는 지원되지 않았지만 지원 라이브러리쪽에서 대응해 현재는 1.6 이상에서 이용 할 수 있게 되었습니다. 단, 중첩 프래그먼트를 이용하면 코드가 복잡해지고 구현 난이도가 높아 집니다. 가능하면 커스텀 뷰로 대체 등을 검토 해보세요 activity_main.xml MainActivity.java public class MainActivity extends AppCompatActivity { private static final String TAG_PARENT = "TAG_PARENT"; @Override protected void onCreate(Bundle savedInstanceState..