ビューの特定のポイントからサービスサービスは、界面活性が存在しないことを理解することができ、
サービスのライフサイクルアプローチは活動の一部に満たない、唯一のonCreate、ONSTART、onDestroy
また、2つのサービスの利用に分割され、
最初は、開閉することであり、第二は、和解の結合タイであります
オープンサービス(STARTSERVICE)
サービスは、発信者の活動が終了し、発信者との一切の関係に開いていないと、サービスはまだバックグラウンドサービスの動作に影響を与えることなく、実行されています。
あなたは活動におけるメソッド内のサービスを呼び出すことはできません
バインディングサービス(bindService)
道オープンサービスを結合することによって、サービスとサービスは学生と行うが、同じ金型用しません。呼び出し側の活動が終了した場合、彼はバインドされたサービス終了に従います。
サービスでの活動は、メソッド内で呼び出すことができます
まず、OnCreate関数の実装に始まり、そしてONSTART、最後に破棄指示し、
そして、発信者終了サービスが終了し、次回再びライン上の呼び出し側は、まだこのサービスをオフにすることができないとき
サービスは独立して生きることができることを、この手段
第1の現象は、ケースであります
現象によって、私たちは3例を実行している、見ることができます
前に使用されていません。このサービスは、実行1.作成し、二段階を起動することで、
2.その後、サービスを開くためにクリックするだけで、ステップを「開始」を実行することができ、破壊前にサービスを作成し、いません
3.サービスを閉じたときに、オープンは再作成して開始を開始したクリック
サービスに行われていない何のサービスを閉じないようにします4。
アイデアの実現:彼はサービスを継承して、新しいとして私たちの新しい活動として、新しいサービスを作成し、
それから彼はmainfestに登録して行きました。
パッケージcom.example.xialm.service_21tolog; インポートandroid.app.Service; インポートandroid.content.Intent; インポートandroid.os.IBinder; インポートandroid.support.annotation.Nullable; インポートandroid.util.Log; / ** * 。2019年11月7日ON xialmによって作成 * / パブリック クラス MyOwnService 拡張サービス{ プライベート int型のI1、I2、I3、I4を; // 時間だけ呼び出されます作成 @Override 公共 のボイドのonCreate(){ I1 ++ ; ログイン.I( "ログ"、+ I1 + "回" "私が最初に作成しました" ); } // あなたが実行するたびに呼び出されます @Override 公共 のボイド ONSTART(テントテント、int型startID){ I2 ++ ; Log.i( "ログ"、+ I2 + "回" "私が最初に走りました" ); } // たびオフが呼び出されます。 @Override 公共 無効onDestroy(){ I3 ++ ; Log.i(、+ I3 + "回" "私は上終わった" "ログイン" ); } @Nullable @Override 公共IBinder [OnBind]の(意図意図){ リターン はnull ; } }
mainactivityコード
パッケージcom.example.xialm.service_21tolog。 輸入android.content.Intent; 輸入android.support.v7.app.AppCompatActivity; 輸入android.os.Bundle; 輸入android.util.Log; 輸入android.view.View; 輸入android.widget.Button; パブリック クラス MainActivityは拡張AppCompatActivity { プライベートボタンb_openを。 プライベートボタンb_close。 @Override 保護された ボイドのonCreate(バンドルsavedInstanceState){ スーパー.onCreate(savedInstanceState)。 setContentView(R.layout.activity_main)を、 B_open = (ボタン)findViewById(R.id.b_1); b_close = (ボタン)findViewById(R.id.b_2); b_open.setOnClickListener(新しい新しいView.OnClickListener(){ @Override 公共 のボイドのonClick(ビューV){ テントテント = 新しい新しいテント(「fuwu1」); //はアンドロイド5.0以降、パッケージを取得するには、その名前を追加する必要があります 。//が5.0後にパッケージ名を設定する必要性と互換性のある、5.0アンドロイド、 // これは(同じ目的フィルタを有する複数のサービス)は、異なるパッケージ間反対である衝突を防止するために //サービスが開始開始されていないことを注意活動 intent.setPackage(getPackageName())。 STARTSERVICE(インテント)。 } })。 b_close.setOnClickListener(新しいView.OnClickListener(){ @Override 公共 のボイドのonClick(ビューV){ テントの意図 = 新しいテント( "fuwu1" ); intent.setPackage(getPackageName()); // Log.i(「当前包」getPackageName()); stopService(意図); } })。 } }
XML
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < RelativeLayout のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android" のxmlns:ツール= "http://schemas.android .COM /ツール」 アンドロイド:layout_width = "match_parent" のandroid:layout_height = "match_parent" アンドロイド:paddingBottomの= "@ DIMEN / activity_vertical_margin" アンドロイド:paddingLeft = "@ DIMEN / activity_horizontal_margin" アンドロイド:paddingRight = "@ DIMEN / activity_horizontal_margin" アンドロイド:paddingTop = "@ DIMEN / activity_vertical_margin" ツール:> < TextViewの アンドロイド:ID = "@ + ID / TV1" アンドロイド:layout_width = "wrap_content" のandroid:layout_height = "wrap_content" アンドロイド:テキスト= "Hello Worldの!" /> < ボタン アンドロイド:ID = "@ + ID / B_1" アンドロイド:layout_below = "@ + ID / TV1" アンドロイド:テキスト= "开服务" のandroid:layout_width = "wrap_content" のandroid:layout_height = "wrap_content" /> < ボタン アンドロイド:ID = "@ + ID / B_2を" アンドロイド:テキスト= "关服务" のandroid:layout_width = "wrap_content" のandroid:layout_height = "wrap_content" /> </ RelativeLayout >