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

안드로이드 버튼연속클릭시 미디어플레이어 서비스 중복실행

0 추천

음 우선은.. 버튼 클릭에 딜레이를 줘서 해결하려 하는데

더좋은 방법이 있을까요?

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Intent serviceIntent = new Intent(getApplicationContext(), AudioPlaybackService.class);

        findViewById(R.id.button_play).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
               // serviceIntent.putExtra(AudioPlayBackService.EXTRA_AUDIO_URL, "음원URL");
                startService(serviceIntent);


            }
        });

        findViewById(R.id.button_stop).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                stopService(serviceIntent);
            }
        });
    }
}

버튼을 시간을 두고 클릭하면 중복실행이 되지 않습니다.

익명사용자 님이 2015년 4월 27일 질문
2015년 4월 27일 수정
애초애 동일한 service가 중복실행이 되었던 거였나요?
아니지 않나요?

4개의 답변

0 추천
빠른 클릭을 방지하기 위해서는 보통

클릭시 disable 시키는 방법을 많이 씁니다.

disable 시키면 클릭 자체가 안되니 연속 클릭이 방지가 되겠죠.

다시 활성화 시키는건 타이밍을 보면 되겠습니다.

화면이 넘아갔다가 돌아오는 경우에는 onResume 에서 활성화 하면 되고

그게 아니라면 타이머라든가 기타 조건에 의해서 다시 활성화 하면 되겠습니다.
부르스리 (1,620 포인트) 님이 2015년 4월 28일 답변
0 추천

출처 : http://stackoverflow.com/questions/5608720/android-preventing-double-click-on-a-button

private long mLastClickTime = 0;

// inside onCreate or so:
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // mis-clicking prevention, using threshold of 1000 ms
        if (SystemClock.elapsedRealtime() - mLastClickTime < 1000){
            return;
        }
        mLastClickTime = SystemClock.elapsedRealtime();
        // do your code here
    }
}

 

Gradler (109,780 포인트) 님이 2015년 4월 28일 답변
0 추천
전역변수로 flag를 생성하고 제어하면 됩니다.

private static boolean myflag;

서비스 중복실행이 안되게끔 하면될것같네요
aabb (820 포인트) 님이 2015년 4월 28일 답변
0 추천
서비스는 한 번 실행하고, 버튼이 눌리면 동작 신호만 서비스로 넘기는게 낫지 싶은데요
쎄미 (162,410 포인트) 님이 2015년 4월 28일 답변
...