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

안드로이드 oncreate 함수 호출 에러 관련 문제(서비스 바인딩,AsyncTask)

0 추천
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //서비스 시작과 동시에 구동함.

        if(!isService) {
            startService(new Intent(pairingActivity.this, socketService.class));
            bindService(new Intent(this, socketService.class), mConnection, Context.BIND_AUTO_CREATE);
            isService = true;
        }
        //disconnectButton();
        setContentView(R.layout.activity_pairing);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //toolbar.setTitleTextColor(Color.BLACK);
        toolbar.setBackgroundColor(Color.WHITE);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);


        TextView textView = (TextView)findViewById(R.id.textView);
  

       // final Button btn_wifi = (Button) findViewById(R.id.btn_wifi);
        final Button btn_cancel = (Button) findViewById(R.id.cancel_button_pairing);
        final Button btn_confirm = (Button) findViewById(R.id.cancel_button_confirm);

        final EditText edtTextAddress = null, edtTextPort=null;

        final Intent intent = getIntent();
        wp_id = intent.getStringExtra("WP_ID");
        BUTTON_ID =intent.getStringExtra("BTN_ID");
        wp_role = intent.getStringExtra("role");
        token = FirebaseInstanceId.getInstance().getToken();

        //액티비티 시작과 함께 데이터베이스 접속 해서 값 받아옴
        mArrayList = new ArrayList<>();

        GetData1 task = new GetData1();
        task.execute("http://example.com/app/getjson.php");

        System.out.println("Address:" +mArrayList.size());
        //}
       final ConnectivityManager manager;
       final WifiManager wifiManager=(WifiManager)getSystemService(WIFI_SERVICE); //활성화 한지 와이파이 체크 하기 위함
       manager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); //와이파이 연결 체크

구현한 내역은 다음과 같습니다.

서비스에서 스레드를 이용한 소켓통신을 준비

OnCreate에서 서비스 시작 및 바인딩(소켓통신을 위해서) 같은 OnCreate에서 AsyncTask를 이용해 웹서버에서 JSON값을 받아옴

AsyncTask로 받아온 값과 소켓에서 받아온 값을 버튼을 눌렀을 때 비교하여 다음 액티비티로 이동 하는게 큰 설계 줄기입니다.

 

문제는 처음 액티비티가 시작되고 나서 백그라운드로 잠깐 나갔다 오거나 설정에 다녀오면(반드시 해야 함 ) OnCreate함수가 재호출 되어 위의 내역이 전부 다시 진행이 됩니다. 화면전환이나 키보드 전환등에 대해서도 검색해서 진행해봤는데 제 코드와 관계 없는 해결 내역인것 같습니다. 

생명주기상 백그라운드를 켰다가 실행하면 OnCreate 함수가 실행이 안되어야 정상인거 같은데 제가 서비스를 바인딩해서 발생하는 문제인지요? 첨부한 내역은 OnCreate 함수 상단부분입니다. 혹시 이상있는 부분이 있으면 조언 부탁 드리겠습니다. 감사합니다.

P.s 특정기기에서만 안되는 경우가 있어서 혹시 스레드를 잘못 쓰는 문제인건가도 싶습니다. 어렵네요 ㅠ 

 

익명사용자 님이 2018년 4월 5일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...