onCreate と　onStart と onResume の違い



###基本的なライフサイクル

**onCreate** でActivityが初めて生成され、Activityの初期化は全てここに書く。つまり全て初期化される。

**onStart** は Activityが開始された時に呼ばれる。Activity生成されたがユーザーには見えない時。

**onResume** は　Activityが表示された時。


###onStartの違いとonResumeの違い
Activityが復帰する場合、
onStartとonStopに対応し、
onResumeはonPause(他のactivityに行った場合)に対応する。

![スクリーンショット 2015-07-19 17.38.13.png](https://qiita-image-store.s3.amazonaws.com/0/70960/2b97015e-82ad-c42b-219a-61dc6d119160.png "スクリーンショット 2015-07-19 17.38.13.png")

Activityが起こされるときはほとんど、onStartが呼び出される。

###Viewを再表示するのはonResume

Viewの色を変更するActivityを作成した。
画面横にしたときにライフサイクルを確認する。

``` java

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.SeekBar;


public class LifeCycle extends AppCompatActivity {

    private View mColorView;
    private SeekBar mSeekBarRed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lifecycle);

        mColorView = (View) findViewById(R.id.view_id);
        mSeekBarRed =(SeekBar) findViewById(R.id.seek_bar);
        ColorSet(mSeekBarRed);

    }

    @Override
    protected void onResume() {
            super.onResume();
            SetView();

    }

    private void ColorSet(SeekBar colorValue){
        colorValue.setOnSeekBarChangeListener(
                new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {}

                    public void onStopTrackingTouch(SeekBar seekBar) {
                        SetView();
                    }
                }
        );
    }

    private void SetView(){
    
        mColorView.setBackgroundColor(Color.rgb(
                mSeekBarRed.getProgress(),50,50));
    }

}

```

```xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:layout_margin="20dp"
        android:id="@+id/view_id" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:orientation="vertical">

            <SeekBar
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:max="255"
                android:id="@+id/seek_bar" />

    </LinearLayout>

</LinearLayout>
```

onCreateとonStartに

```java
 SetView();
```

を書くと
まず初期画面が
![device-2015-07-19-192420.png](https://qiita-image-store.s3.amazonaws.com/0/70960/8f52875b-47bd-4d05-8638-1e40b1d34609.png "device-2015-07-19-192420.png")

色を変更して(RGBのRだけ変更できます。)
![device-2015-07-19-192331.png](https://qiita-image-store.s3.amazonaws.com/0/70960/6887d8f3-a52f-901f-4d18-1546c92cf927.png "device-2015-07-19-192331.png")


横にすると

![device-2015-07-19-192629.png](https://qiita-image-store.s3.amazonaws.com/0/70960/6ec9a2a3-4ac3-381b-e7ef-2779de211ac8.png "device-2015-07-19-192629.png")


となり画面が初期化されます。

onResumeに

```java
 SetView();
```

を書くと
![device-2015-07-19-193055.png](https://qiita-image-store.s3.amazonaws.com/0/70960/5b7e4f8b-f77b-43aa-fb7f-c8cbb2a5281a.png "device-2015-07-19-193055.png")

横にすると

![device-2015-07-19-193113.png](https://qiita-image-store.s3.amazonaws.com/0/70960/81b3a39e-1d38-02ff-21a7-9e8cca33dc86.png "device-2015-07-19-193113.png")

できました。
たぶんonStartで初期化したレイアウトをセットしているので、再描画できなかったのだと思います。
onResumeでAcitivtyの表示したあとに再描画しているので表示できると思う。