Service & Notification(¾Ë¸²¹Ù¶ç¿ì±â) ÀÌ¿ëÇϱâ |
|
|
 |
8³â Àü |
Service
¼ºñ½º´Â ¹é±×¶ó¿îµå¿¡¼ ÀÛµ¿Çϸç Content Provider ¸¦ ¾÷µ¥ÀÌÆ®Çϰųª ÀÎÅÙÆ®¸¦ ½ÇÇà½ÃÅ°°Å³ª Notification(¾Ë¸²)À»
½ÇÇà½ÃÅ°´Â µîÀÇ ¿©·¯°¡Áö ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÏ´Â ÀÛ¾÷À» ¶æÇÑ´Ù. ÇÏÁö¸¸ ±âº»ÀûÀ¸·Î ANRÀ» ¸·±â À§Çؼ µ¹¾Æ°¡´Â
¾²·¹µåÀÇ °³³äÀÌ ¾Æ´Ï¶ó °°Àº ÇÁ·Î¼¼½º ¾È¿¡¼ ½ÇÇàµÇ´Â °³³äÀÌ´Ù.
(1) ÀÛ¼º°ú ½ÇÇà
Service Ŭ·¡½º¸¦ »ó¼Ó¹Þ°í, onCreate(¼ºñ½º°¡ ¸¸µé¾îÁ³À» °æ¿ì ½ÇÇàµÉ ·ÎÁ÷ ÀÛ¼º),
onBind(AIDL ÀÌ¿ë½Ã ÇÊ¿ä) ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵ùÇÑ´Ù.
<1> onStartCommand ÀÇ ¿À¹ö¶óÀ̵ù°ú return
ºÎ°¡ÀûÀ¸·Î ´ëºÎºÐ onStartCommand ¸Þ¼ÒµåÀÇ ¿À¹ö¶óÀ̵ùÀÌ ÇÊ¿äÇѵ¥ ÀÌ ¸Þ¼Òµå¸¦ ÅëÇؼ startService ¸Þ¼Òµå
È£Ãâ½ÃÀÇ ÀÛµ¿ ¹æ½ÄÀ» Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.(2.0 ÀÌÀüÀº onStart()¿¡ ±¸ÇöÇß¾ú´Ù.)
- START_STICKY : ÀϹÝÀûÀÎ °æ¿ì ÀÌ °ªÀ» ¸®ÅÏÇÏ°Ô µÇ°í, ½ÇÇ൵Áß ¼ºñ½º°¡ Á¾·áµÆ´Ù°¡ ´Ù½Ã ½ÃÀÛ½Ã
onStartCommand ¸Þ¼Òµå°¡ °è¼Ó ½ÇÇàµÇ°Ô µÈ´Ù.
- START_NOT_STICKY
- START_REDELIVER_INTENT
<2> AndroidManifest.xml ¿¡ ¼³Á¤
<service android:name="AIDLService">
<intent-filter>
<action android:name="com.kh.service.AIDL" />
</intent-filter>
</service>
<3> Çش缺ñ½º¸¦ ½ÇÇà½ÃÅ°°í ½ÍÀ»¶§ startService(intent)¸¦ ÅëÇؼ ½ÇÇàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
À̶§ ¿ÜºÎ ÇÁ·Î±×·¥¿¡¼µµ ½ÇÇàÀÌ °¡´ÉÇѵ¥ À̶§´Â intent¿¡ ActionÀ» intent-filter¿¡ ÁöÁ¤Çß´ø actionÀ¸·Î
ÁöÁ¤ÇÔÀ¸·Î¼ ¿ÜºÎ¿¡¼µµ ¼ºñ½º¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µÈ´Ù.
Âü°í »çÀÌÆ®
http://developer.android.com/guide/topics/ui/notifiers/notifications.html - ¾Ë¸²¹Ù ¶ç¿ì±â
»ç¿ë ¿¹Á¦
package com.example.serviceapp;
import android.app.*;
import android.content.*;
import android.os.*;
import android.support.v4.app.*;
import android.support.v4.app.NotificationCompat.*;
import android.util.*;
import android.widget.*;
public class TimeService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.d("service","onCreate ½ÇÇà");
}
@Override
public void onDestroy() {
Log.d("service","onDestroy ½ÇÇà");
mRunning = false;
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
// switch(msg.what) {}
// Toast.makeText(getApplicationContext(), "¾Ë¸²!", 0).show();
NotificationManager manager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder =
new NotificationCompat.Builder(TimeService.this);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("¾Ë¸³´Ï´Ù")
.setContentText("¿Ô´Ù³×~¿Ô´Ù³×~ ³»~°¡ ¿Ô´Ù³×~")
.setAutoCancel(true) // ¾Ë¸²¹Ù¿¡¼ ÀÚµ¿ »èÁ¦
.setVibrate(new long[]{1000,2000,1000,3000,1000,4000});
// autoCancel : Çѹø ´©¸£¸é ¾Ë¸²¹Ù¿¡¼ »ç¶óÁø´Ù.
// vibrate : ½¬°í, ¿ï¸®°í, ½¬°í, ¿ï¸®°í... ¹Ð¸®¼¼ÄÁ
// Áøµ¿ÀÌ µÇ·Á¸é AndroidManifest.xml¿¡ Áøµ¿ ±ÇÇÑÀ» Áà¾ß ÇÑ´Ù.
// ¾Ë¶÷ Ŭ¸¯½Ã MainActivity¸¦ ȸ鿡 ¶ç¿î´Ù.
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext()
, 0
, intent
, Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
builder.setContentIntent(pIntent);
manager.notify(1, builder.build());
};
};
protected boolean mRunning;
// Á¦ÀÏ Áß¿äÇÑ ¸Þ¼µå! (¼ºñ½º ÀÛµ¿³»¿ëÀ» ³Ö¾îÁØ´Ù.)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("service","onStartCommand ½ÇÇà");
final int time = intent.getIntExtra("time", 0);
// Toast.makeText(this, "¾È³ç~ ³ ¼ºñ½º : "+time, 0).show();
// handler ÅëÇÑ Thread ÀÌ¿ë
new Thread(new Runnable() {
@Override
public void run() {
mRunning = true;
while(mRunning) {
SystemClock.sleep(time*1000);
mHandler.sendEmptyMessage(0);
}
}
}).start();
return START_STICKY_COMPATIBILITY;
}
} |
|
̵̧ : 263 |
̵̧
¸ñ·Ï
|
|