마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Service 에서 run() 이 작동하지 않습니다. [closed]

+1 추천

문제점을 찾았습니다!!

혹시라도 같은 문제 겪을 분들 위해서 추가합니다.

MainService 에서 보면

Thread thread = new Thread();
thread.start();

부분이 있는데

Thread thread = new Thread(this); 로 고쳐주니 작동하네요!!

 

 

 

얼마전까지는 잘 작동되다가 어느날 갑자기 서비스에서 run() 이 작동되지 않습니다.

며칠간 고민해봐도 해답이 나오지 않아 여기 질문해봅니다.

 

AlarmManagerService -> AlarmManagerReceiver -> MainService 구조로 실행되는데,

public class AlarmManagerService {

    Context mContext;

    public AlarmManagerService(Context context) {
        mContext = context;
    }

    public void registerAlarmManager() {
        Log.i("registerAlarmManager()", "registered");

        Intent intent = new Intent(mContext, AlarmManagerReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 123456, intent, 0);

        AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
        am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+1000, 180000, pendingIntent);
    }
}
public class AlarmManagerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("AlarmManagerReceived", "received");
        
        if (!isServiceRunning(context)) {
            Intent service = new Intent(context, MainService.class);
            context.startService(service);
        }
    }

    private boolean isServiceRunning(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service: am.getRunningServices(Integer.MAX_VALUE)) {
            if (MainService.class.getName().equals(service.service.getClassName())) {
                return true;
            }
        }

        return false;
    }
}
public class MainService extends Service implements Runnable {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("onStartCommand", "called");
 
        .....

        Thread thread = new Thread();
        thread.start();

        return START_STICKY;
    }

    @Override
    public void run() {
        while (true) {
            Log.i("run", "run()");

            .....
        }
    }
}

Log:

01-25 09:43:44.564    1765-1765/cc.psdev.heywifi I/registerAlarmManager()﹕ registered
01-25 09:43:56.241    1765-1765/cc.psdev.heywifi I/AlarmManagerReceived﹕ received
01-25 09:43:56.249    1765-1765/cc.psdev.heywifi I/onStartCommand﹕ called

 

여기까지만 오고 run 에 들어오질 않네요..

잘 작동하던게 갑자기 안되서 당황스럽네요;;

안드로이드 스튜디오 설정 파일 삭제하고 다시 불러와도 해결되지도 않고........

 

질문을 종료한 이유: 해결되었습니다.
prsh0525 (470 포인트) 님이 2015년 1월 25일 질문
prsh0525님이 2015년 1월 25일 closed
...