728x90
Service 서비스
백그라운드 처리, 쓰레드와 다른 작업할 때
Activity는 화면을 가지고 있어 화면이 보이는 동안 동작
안드로이드 7버전은 서비스 액티비티(어플) 종료시 다시 쓰레드 동작 , 8이후는 종료
New -> serivce
< MyService.java > //쓰레드 추가 가능
//서비스가 가동될 때 호출되는 메서드
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
//서비스가 중지되면 호출되는 메서드
@Override
public void onDestroy() {
super.onDestroy();
}
<메인>
serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
//중지
stopService(serviceIntent);
Intent Service
IntentService는 Serivce 내부에서 Thread를 운영
//별도의 쓰레드가 발생되어 처리
@Override
protected void onHandleIntent(Intent intent) {
}
Forground Service
<메인>
serviceIntent = new Intent(this, ForgroundMyService.class);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
startForegroundService(serviceIntent);
}else{
startService(serviceIntent);
}
Forground Service
notification으로 알려준다.
1. <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
2. <ForgroundMyService.java>
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//안드로이드 8 이상이면 노티피케이션 메시지를 띄우고 forground serivice로 운영
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationManager NoManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel("test1","Service",NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true); //채널에 게시 된 알림에 알림 표시 등을 표시
channel.setLightColor(Color.RED);
channel.enableVibration(true);
NoManager.createNotificationChannel(channel);
NotificationCompat.Builder NCBuilder = new NotificationCompat.Builder(this,"test1");
NCBuilder.setSmallIcon(android.R.drawable.ic_menu_search);
NCBuilder.setContentTitle("서비스 가동");
NCBuilder.setContentText("서비스가 가동 중입니다람쥐");
NCBuilder.setAutoCancel(true);
Notification notification = NCBuilder.build();
//현재 노티피케이션 메시지를 포그라운드 서비스의 메시지로 등록
startForeground(10,notification);
}
//쓰레드 가동
Runnable runnable =new Runnable(){
@Override
public void run(){
SystemClock.sleep(5000);
System.out.println("Thread");
//완료되면 노티피케이션 메시지 사라지게
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
stopForeground(STOP_FOREGROUND_REMOVE);
NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
nm.cancel(10);
}
}
};
Thread thread = new Thread(runnable);
thread.start();
return super.onStartCommand(intent, flags, startId);
}
IPC
Activity에서 실행 중인 서비스의 데이터를 사용
(test 실패.)
'Front-end > Android (안드로이드 앱 개발)' 카테고리의 다른 글
Android Studio , 파일 저장 읽기, 내부 저장소 / 외부 저장소 (0) | 2020.08.11 |
---|---|
Android Studio , ListFragment & DialogFragment (0) | 2020.08.07 |
Android Studio , 시스템 메시지 : BroadcastReceiver [문자 메시지 읽기] (0) | 2020.08.02 |
Android Studio , BroadCast Reciever 브로드캐스트 리시버 (0) | 2020.08.01 |
Android Studio , URI (Intent)Activity Action / 공통 인텐트 / 구글 지도, 크롬, 다이얼, 전화걸기, 웹검색 (0) | 2020.07.30 |
댓글