안드로이드 개발 질문/답변 (글 수 45,052)
  • RSS
  • Skin Info
  • Tag list
  • List
  • Webzine
  • Gallery

실수로 정보란에 글을 올려서 그냥 전부 긁어서 왔습니다;;;


안녕하세요^ ^
아무것도 모르는 것에서 시작해서 이 곳에서 많은 정보를 얻어가며 조금씩 지식을 늘려나가고 있습니다. 먼저 감사드려요^ ^


음, 백그라운드로 웹서버에 연결해서 계속 값을 받아오려고해요.

즉, 어떠한 작업이 현재 진행중이고 백그라운드로 그와 동시에 웹에서 값을 계속적으로 요청-응답을 체크하려고해요.

저는 Thread, Activity 와 AlarmManager 이렇게 3가지를 생각을 하고 있는데요.

Thread의 경우는 메인으로 진행중인 녀석도 Thread를 이용하고 있습니다. 그런데 응답을 하는 코드를 새로운 Thread를 생성해서 돌렸더니 반응이 없더라구요. Thread 두 개가 동시에 돌아갈 수 는 없는건가요?? 

싱글프로세서에서는 실제로 불가능한걸로 알고 있습니다만 그래도 인터액티브하게 수행을한다면 짧은 시간이라서 멀티로 동작하는 것처럼 구현이 되지 않을까해서 Thread를 생각해보았습니다. 그런데 하나를 돌리면 다른 녀석이 돌아가질 않더라구요.

하나의 핸들러에 Msg를 따로 보냈더니 당연히 한쪽의 동작이 멈췄구요.

핸들러를 2개를 정의해서 각각 돌렸는데 아예 실행이 되질 않더라구요. 핸들러와 Thread의 개념이 정확하지 않아서 인지 핸들러를 2개를 써도 되는지도 좀 알고 싶습니다.


그리고 Activity의 경우는 Intent를 이용해서 새로 시작한 후에 그 녀석을 백그라운드로 돌려볼까 했는데요. 그래서 또 질문을 드립니다.
Activity가 실행되면 이전 Activity의 컨트롤이 새로 시작되는 녀석한테 넘어가는거 같은데요. Intent를 이용해서 실행되는 녀석이 단지 백그라운드에서 조용히 돌아가게만 할 수 있나요? Parent Activity가 모든 컨트롤(키입력이나 다른 버튼들..)을 갖게 하고 싶습니다.
setVisibility 라는 함수가 있던데 이것만으로 가능한건가하여 질문을 드립니다.


마지막으로 알람메니져를 사용하는게 가장 효과적이지 않을까라고 생각된는데, BroadReceiver? 그걸 이용할려고 했는데 해당 클래스로 값을 어떻게 넘기고 받아올 수 있는지가... 알람매니져에 대한 예제소스가 있으면 알려주셨으면 합니다.


감사합니다(_ _)

댓글
2009.08.27 11:32:03
dualwield
apiDemo 에 보면.  AlarmManager 로  Toast(잠깐 뜨고 사라지는 팝업 메시지)를 동작시키는 예제가 있습니다.
그것 참고해보세요. 예전에 저도 그것 보고 서버&클라이언트 연결이 살아있는지를 체크했는데.
잘 동작 하더군요.

alarmManager로 검색하면 아래 블로그가 검색되는데,
여기에 잘 정리 되어있네요. 따라하면 바로 동작할것 같습니다. (apiDemo 에 있는거랑 거의 같은것 같네요.)
댓글
2009.08.27 11:33:39
dualwield
아..그리고 여기는 Q&A 게시판이 아니네요.
답글 달고 보니.. 정보란입니다.ㅎㅎ

댓글
2009.08.27 13:15:57
rebmir
dualwield 님 답변 감사합니다^ ^

먼저 링크걸어주신분의 블로그를 참고하고 이해가 되지않아서 위의 글을 쓰게되었습니다^ ^;;

해당 receiver로 값을 전달을 어떻게 해야하는지가 나와있지 않아서요.^ ^;;
댓글
2009.08.27 14:29:49
dualwield
[TestMain.java]

Toast mToast;
PendingIntent sender;
AlarmManager am;

public static String g_strValue1 = "";
public static String g_strValue2 = "";

public void onResume()
{
     super.onResume();

if(조건에 맞을때..)
{
// AlarmManager
Intent intent = new Intent(TestMain.this, AlarmService_Service.class);
sender = PendingIntent.getBroadcast(TestMain.this, 0, intent, 0);
long firstTime = SystemClock.elapsedRealtime();
firstTime += 60*1000;
//Alarm을 설정한다. 60초마다 반복.
am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 60*1000, sender);
}
}

public void onPause()
{
super.onPause();
  
     //서비스 종료
     if(am!=null)
{
     try
{
     am.cancel(sender);
     }
     catch(Exception e)
{
     }
     }
    }

[AlarmService_Service.java]

public class AlarmService_Service extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)//10초 마다 여기로 들어온다.
{
Toast.makeText(context, "text", 1000).show();
Log.d("Toast", "T O A S T");
Log.d("TestMain. g_strValue1 : ", TestMain. g_strValue1 );
Log.d("TestMain. g_strValue2 : ", TestMain. g_strValue2 );
//TCPClient t = new TCPClient();
//String recv = t.login(TestMain.g_strTagID, TestMain.g_strTagPW);
}
}
댓글
2009.08.27 14:37:37
dualwield
그냥 static으로 잡아놓고 다른곳에서 값을 읽어오면 될것같습니다.

댓글
2009.08.27 15:27:36
rebmir
답변감사합니다. 제가 Java에 익숙하지 않아서 public으로 변수를 선언하면 외부에서 핸들할 수 있다는걸 까맣게 있고 있었네요^ ^;;

그리고 TestMain에서 onResume과 onPause를 꼭 오버라이딩해야하나요?? 만약 위의 예제에서 알람매니져를 이용해서 펜딩인텐트값이 넘어가면 TestMain은 pause상태로 들어가게 되는건가요??? (아마도 그건 아닐거 같지만서도..)
댓글
2009.08.27 16:00:13
dualwield
예. 절대 아닙니다.
그냥 제가 예전에 했던 안드로이드 TCP 소켓 프로그램 관련해서 했던것과 관련된 형태일 뿐입니다.
화면 전환이 새로 되었을 때나 종료되었을때..혹은 foreground 로 다른 activity 가 올라왔을때 등 상황에 맞게
AlarmManager 가 다시 시작되고 , 끝나고 하도록 한것입니다.
ps. 제 경우는 onCreate 에서 처리하지 않고, 저런 방식으로 사용하고 있다는 정도로 참고하시라고 onResume, onPause 그대로 해놨어요.

댓글
2009.08.28 09:11:26
rebmir
아.. 감사합니다! ^ ^
삭제 수정 댓글
2009.08.28 18:41:56
rebmir
추가로 질문이 생겼습니다.

onReceive() 에서 어떠한 조건을 만족시키면 alarm manager를 중지시키려면 어떻게 해야하나요?





XE Login

OpenID Login