0

Androidでの命令の流れを理解しようとしており、次のコードを書きました

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "This is the ------------------- Start Line");
        Intent intent = new Intent(MainActivity.this, TimeCheckService.class);
        startService(intent);
        for ( int i = 0; i < 10; i++ ) {
            Log.d(TAG, "This line is to check the________________________ sequence of execeution in Android.");
        }
        Cursor cursor = getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        cursor.close();
    }

logcat の出力は次のとおりです。

08-29 23:00:05.742: D/MainActivity(1462): This is the ------------------- Start Line
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:05.742: D/MainActivity(1462): This line is to check the________________________ sequence of execeution in Android.
08-29 23:00:07.502: D/IsContactEmpty(1462): Starting IsContactEmpty
08-29 23:00:09.162: D/IsContactEmpty(1462): End IsContactEmpty
08-29 23:00:09.162: D/TimeCheckService(1462): Contacts not Empty

Logcat のタイムスタンプは、MainActivity のすべてのコードが実行された後に実行されたことを示しています。ここIntentService、MainActivity のシーケンスによると、以前に開始され、並行して実行されるべきでしたか? 誰かがこれを説明できますか?23:00:07.502IntentService

のコードIsContactEmpty

public class IsContactEmpty {
    public static final String TAG = "IsContactEmpty";

    @SuppressWarnings("unused")
    private void isContactsEmpty() {

    }

    public static boolean valueOf(Context context) {
        Log.d(TAG, "Starting IsContactEmpty");
        boolean isEmpty;
        Cursor cursor = context.getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if (cursor.getCount() > 0) {
            isEmpty = false;
        } else {
            isEmpty = true;
        }
        cursor.close();
        cursor = null;
        Log.d(TAG, "End IsContactEmpty");
        return isEmpty;
    }
}

以下のように置き換えIntentServiceましたThread

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "This is the ------------------- Start Line");

        new ChkServiceThread().start();

        //Intent intent = new Intent(MainActivity.this, TimeCheckService.class);
        //startService(intent);
        for ( int i = 0; i < 10; i++ ) {
            Log.d(TAG, "This line is to check the________________________ sequence of execeution in Android.");
        }
        Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        cursor.close();
    }

    private class ChkServiceThread extends Thread {

        @Override
        public void run() {

            boolean isEmpty = IsContactEmpty.valueOf(MainActivity.this);

            if ( isEmpty == true ) {
                Log.d(TAG, "Contacts Empty");

            } else {
                Log.d(TAG, "Contacts not Empty");
                // mHandler.post(new DisplayToast("Contacts Ok", this));
            }

        }

    }

アプリケーションを 10 回実行しましたが、結果は前の logcat 出力とまったく同じままです。

4

1 に答える 1

1

あなたIntentServiceとあなたMainActivityは同じプロセスで走ります。onCreate()、 、などのアクティビティとサービスのすべてのライフサイクル呼び出しは、メイン スレッドonResume()で実行されます。そのため、呼び出しが完了onStartCommand()するまで、メイン スレッドの Service で何かが発生することはありません。onCreate()MainActivity

于 2012-08-29T18:18:16.863 に答える