-1

Android アプリを作成しようとしているときに問題が発生しました。メインのアクティビティで使用するサービスを作成しました。インターネットで見つけたガイドに従って、関数のバインドを行いonStartます。

@Override
public void onStart() {
    super.onStart();
    //TextView textView = (TextView) findViewById(R.id.myText);
    textView.setText("Bound??????");
    if (mBound == false) {
        Intent intent = new Intent(this, com.mycompany.Messenger.LocalService.class);
        mBound = bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
        //mBound = bindService(intent, mConnection, 0);
        //startService(intent);
        if (mBound == true)
        {
            TextView textView = (TextView) findViewById(R.id.myText);
            textView.setText("Bound");
        }
        if (mBound == false)
        {
            TextView textView = (TextView) findViewById(R.id.myText);
            textView.setText("UnBound");
        }
        boolean connected = mService.CreateConnectionNetwork();


   }
}

バインドを推奨した後、まだonStart関数内でバインド サービスのメソッドを呼び出そうとします。このメソッドは、インターネットへの接続があるかどうかをチェックします。ただし、その時点でアプリがクラッシュします。お気づきのように、バインドが成功したかどうかのチェックを追加しましたが、成功したことがわかり、問題がさらに混乱しています。

アプリに正しいアクセス許可を与えました。ボタンを押すなどのイベントを通じてサービスのメソッドを開始すると、サービスのメソッドが実際に機能します。ただし、ユーザーの操作後ではなく、アプリの起動時に自動的に実行したいタスクがあります。助言がありますか?

4

1 に答える 1

-1

この問題は、サービスの仕組みに対する誤解が原因で発生します。関数内でバインディングを行う場合はonStart、「インテント」(シグナルのようなもの) をシステムに送信してサービス バインディングを実行するだけです。ただし、理論上は、バインディングがいつ完了するかについての保証はありません。そして実際には、onStart関数がその作業を完了した後にのみバインディングが完了することを確認できます。そのため、たとえばボタンを介してサービスを使用できます。

サービスがバインドされたのが初めてで、サービスがバインドされていることが確実なときにいくつかのアクションを自動的に実行したい場合、これを実行するのに最適な場所はonServiceConnected関数内です。上記の関数が呼び出されると、バインディングが開始されたことを確認できるため、バインディングが完了したコードのチャンクの後 (mService = binder.getService();以下のコードの の後) に、実行するコードを追加できます。

    @Override
    public void onServiceConnected(ComponentName mConnection, IBinder service) {

        LocalService.LocalBinder binder = (LocalService.LocalBinder) service;
        mService = binder.getService();
        mService.CreateConnectionNetwork();
        textView.setText("I just used the service and it did not crashhh!!!");

    }
于 2015-02-02T15:36:53.130 に答える