android藍芽聊天開發(3)四大元件案例
阿新 • • 發佈:2019-01-09
介面如圖:依次點選按鈕,在debug模式下啟動,通過Android studio的console後臺,可以看到system列印的 資訊
先點start new activity-->startService-->sendBroadCast-->sendBroadCast2-->stopService
執行日誌為:
I/System.out: NewActivity已經啟動 I/System.out: 接收到資料:Hello from main activity. I/System.out: onStartClicked I/System.out: MyService:onCreate,服務啟動 I/System.out: MyService:onStartCommand,service每次都會呼叫的服務開始命令 V/AudioManager: playSoundEffect effectType: 0 I/System.out: onSendClicked,系統呼叫sendBroadcast()方法,顯式發訊息 I/System.out: onReceive,接收到廣播發來的訊息 I/System.out: onSendClicked2,系統呼叫sendBroadcast()方法,隱式發訊息 I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals() I/zygote64: Do full code cache collection, code=125KB, data=108KB I/zygote64: After code cache collection, code=113KB, data=75KB V/AudioManager: playSoundEffect effectType: 0 I/System.out: onStartClicked I/System.out: MyService:onDestroy,服務銷燬
mainActivity:
package com.lmj.bluetoothchat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onBtnClicked(View v){ System.out.println("onBtnClicked"); // 啟動一個新的畫面Activity // Intent是一個訊息物件,封裝有動作和資料 // 顯式呼叫NewActivity Intent intent = new Intent(this, NewActivity.class); intent.putExtra("msg", "Hello from main activity."); startActivity(intent); } public void onStartClicked(View v){ System.out.println("onStartClicked"); // 啟動後臺服務 // 服務長期後臺執行,除非,使用者顯式呼叫stopService來停止服務 startService(new Intent(this, MyService.class)); } public void onStopClicked(View v){ System.out.println("onStartClicked"); stopService(new Intent(this, MyService.class)); } public void onSendClicked(View v){ System.out.println("onSendClicked,系統呼叫sendBroadcast()方法,顯式發訊息"); // 通過sendBroadCast傳送一個廣播 // 顯式傳送 sendBroadcast(new Intent(this, MyReceiver.class)); } public void onSendClicked2(View v){ System.out.println("onSendClicked2,系統呼叫sendBroadcast()方法,隱式發訊息"); // 通過sendBroadCast傳送一個廣播 // 隱式廣播需要指定一個匹配Action字串 // 暗號 sendBroadcast(new Intent("com.example.activitytransferdemo.ACTION")); } }
MyService服務類:
package com.lmj.bluetoothchat; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; // 服務一定要註冊到Manifest中去 public class MyService extends Service { private InnerReceiver receiver; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("MyService:onCreate,服務啟動"); // 動態註冊廣播接收器 // 可用於在不同元件之間進行非同步通訊 receiver = new InnerReceiver(); // 意圖過濾(訊息過濾器),匹配隱式訊息 IntentFilter filter = new IntentFilter("com.lmj.bluetoothchat.ACTION"); registerReceiver(receiver, filter); } class InnerReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { System.out.println("InnerReceiver:onReceive,接收到廣播發來的訊息"); } } // 服務只要啟動一次,不管使用者呼叫多少次startService,都只要呼叫一次onCreate建立一個服務物件 // 但是,每次呼叫 startService時,都會呼叫其onStartCommand方法 @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub System.out.println("MyService:onStartCommand,service每次都會呼叫的服務開始命令"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub System.out.println("MyService:onDestroy,服務銷燬"); super.onDestroy(); unregisterReceiver(receiver); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } }
MyReceiver 廣播類(處理廣播的接收):
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
System.out.println("onReceive,接收到廣播發來的訊息");
}
}
第二頁面測試類NewActivity:普及一下知識:
android有
四大元件:Activity、BroadcastReceive、Service、Content Provider ;
五大儲存: SharedPreferences、SDCard 、SQLite資料庫儲存資料、使用ContentProvider儲存資料、IO儲存 ;
六大布局 :LineartLayout 、FrameLayout 、TableLayout 、 RelativeLayout 、 AbsoluteLayout 、 GridLayout ;
七大生命週期 :onCrate 不可見不可互動、 onStart 可見不可互動 、 onResume 可見可互動 、 onPause 可見不可互動 、onStop 不可見不可互動 、 onDestory 銷燬了 、 onRestart 從不可見到可見 ;
八大基本資料型別 : short 短整型 、 int 整型 、 long 長整型 、 float 浮點型 、 char 字元型 、 boolean 布林型 、 byte 位元組型
package com.lmj.bluetoothchat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
// Android中的四大元件都需要註冊到Manifest檔案中
public class NewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 設定螢幕上顯示的內容
setContentView(R.layout.activity_seconde);
System.out.println("NewActivity已經啟動");
// 獲得當前Actiivty啟動的Intent物件
Intent intent = getIntent();
String msg = intent.getStringExtra("msg");
System.out.println("接收到資料:" + msg);
}
}
佈局檔案activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:onClick="onBtnClicked"
android:text="Start New Activity" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerHorizontal="true"
android:onClick="onStartClicked"
android:text="StartService" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:onClick="onStopClicked"
android:text="StopService" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button3"
android:layout_centerHorizontal="true"
android:layout_marginTop="75dp"
android:onClick="onSendClicked"
android:text="Send BroadCast" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="35dp"
android:onClick="onSendClicked2"
android:text="SendBroadcast2" />
</RelativeLayout>