編輯:關於Android編程
Service概念及用途:
Android中的服務,它與Activity不同,它是不能與用戶交互的,不能自己啟動的,運行在後台的程序,如果我們退出應用時,Service進程並沒有結束,它仍然在後台運行,那我們什麼時候會用到Service呢?比如我們播放音樂的時候,有可能想邊聽音樂邊干些其他事情,當我們退出播放音樂的應用,如果不用Service,我們就聽不到歌了,所以這時候就得用到Service了,又比如當我們一個應用的數據是通過網絡獲取的,不同時間(一段時間)的數據是不同的這時候我們可以用Service在後台定時更新,而不用每打開應用的時候在去獲取。
Service生命周期 :
Android Service的生命周期並不像Activity那麼復雜,它只繼承了onCreate(),onStart(),onDestroy()三個方法,當我們第一次啟動Service時,先後調用了onCreate(),onStart()這兩個方法,當停止Service時,則執行onDestroy()方法,這裡需要注意的是,如果Service已經啟動了,當我們再次啟動Service時,不會在執行onCreate()方法,而是直接執行onStart()方法。
Service與Activity通信:
Service後端的數據最終還是要呈現在前端Activity之上的,因為啟動Service時,系統會重新開啟一個新的進程,這就涉及到不同進程間通信的問題了(AIDL),當我們想獲取啟動的Service實例時,我們可以用到bindService和unBindService方法,它們分別執行了Service中IBinder()和onUnbind()方法。
1、添加一個類,在MainActivity所在包之下
復制代碼 代碼如下:
public class LService extends Service {
private static final String TAG = "LService";
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onbind");
return null;
}
@Override
public void onCreate() {
Log.i(TAG, "oncreate");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(TAG, "onstart");
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
Log.i(TAG, "ondestoty");
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "onubind");
return super.onUnbind(intent);
}
public String getSystemTime() {
Time t = new Time();
t.setToNow();
return t.toString();
}
public class LBinder extends Binder {
LService getService() {
return LService.this;
}
}
}
2、在程序界面文件中添加控件
復制代碼 代碼如下:
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="wecclome to Livingstone's bolg" />
<Button
android:id="@+id/startservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="startService" />
<Button
android:id="@+id/stopservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="stopService" />
<Button
android:id="@+id/bindservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="bindService" />
<Button
android:id="@+id/unbindservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="unbindService" />
3、修改MainActivity中的方法,以及讓MainActivity類實現OnClickListener接口
復制代碼 代碼如下:
public class MainActivity extends Activity implements OnClickListener {
private LService mLService;
private TextView mTextView;
private Button startServiceButton;
private Button stopServiceButton;
private Button bindServiceButton;
private Button unbindServiceButton;
private Context mContext;
// 這裡需要用到ServiceConnection,在Context.bindService和context.unBindService()裡用到
private ServiceConnection mServiceConnection = new ServiceConnection() {
// 當bindService時,讓TextView顯示LService裡getSystemTime()方法的返回值
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mLService = ((LService.LBinder) service).getService();
mTextView.setText("I am from Service :" + mLService.getSystemTime());
}
public void onServiceDisconnected(ComponentName name) {
}
};
public void setupViews() {
mContext = MainActivity.this;
mTextView = (TextView) findViewById(R.id.text);
startServiceButton = (Button) findViewById(R.id.startservice);
stopServiceButton = (Button) findViewById(R.id.stopservice);
bindServiceButton = (Button) findViewById(R.id.bindservice);
unbindServiceButton = (Button) findViewById(R.id.unbindservice);startServiceButton.setOnClickListener(this);
stopServiceButton.setOnClickListener(this);
bindServiceButton.setOnClickListener(this);
unbindServiceButton.setOnClickListener(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
}
@Override
public void onClick(View v) {
if (v == startServiceButton) {
Intent i = new Intent(MainActivity.this, LService.class);
mContext.startService(i);
} else if (v == stopServiceButton) {
Intent i = new Intent(MainActivity.this, LService.class);
mContext.stopService(i);
} else if (v == bindServiceButton) {
Intent i = new Intent(MainActivity.this, LService.class);
mContext.bindService(i, mServiceConnection, BIND_AUTO_CREATE);
} else {
mContext.unbindService(mServiceConnection);
}
}
}
4、注冊Service
<service
android:name=".LService"
android:exported="true" >
</service>
5、運行程序
程序界面
點擊startService此時調用程序設置裡面可以看到Running Service有一個LService
點擊stopService
點擊bindService此時Service已經被關閉
點擊unbindService
先點擊startService,再依次點擊bindService和unbindService
< body>先上圖,看看接下來我要向大家介紹的是個什麼東西,如下圖: public View findTargetView(float x, float y, View anc
小米電視2s定價在2999很大程度上是小米電視2s功能的刪減,其中大家最為關注的是砍掉了3D功能,3d功能可能不是每個人都需要,但是有總比沒有要好嗎?你說對
廢話不多說,咱們第一篇文章就是模仿“知乎”的回答詳情頁的動畫效果,先上個原版的效果圖,咱們就是要做出這個效果 在實現之前,
本文實例講述了Android中ViewFlipper的使用及設置動畫效果。分享給大家供大家參考,具體如下:說到左右滑動,其實實現左右滑動的方式很多,有ViewPaer,自