如果是要在背景執行的程式,則需要寫成Service並繼承android.app.Service,由於是在背景執行所以是
要寫成Service而不是Activity,因此需在AndroidManifest新增一個Service。以下範例是按下Start Service之後會
在背景每隔一秒Log目前的時間,按下Stop Service後會停止Log的動作。
2. MainActivity.java
package org.me.android_service;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Button startButton;
private Button stopButton;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
startButton = (Button) findViewById(R.id.startButton);
stopButton = (Button) findViewById(R.id.stopButton);
startButton.setOnClickListener(startClickListener);
stopButton.setOnClickListener(stopClickListener);
}
private Button.OnClickListener startClickListener = new Button.OnClickListener() {
public void onClick(View arg0) {
//啟動服務
Intent intent = new Intent(MainActivity.this, NickyService.class);
startService(intent);
}
};
private Button.OnClickListener stopClickListener = new Button.OnClickListener() {
public void onClick(View arg0) {
//停止服務
Intent intent = new Intent(MainActivity.this, NickyService.class);
stopService(intent);
}
};
}
3. NickyService.java
package org.me.android_service;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import java.util.Date;
//繼承android.app.Service
public class NickyService extends Service {
private Handler handler = new Handler();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
handler.postDelayed(showTime, 1000);
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
handler.removeCallbacks(showTime);
super.onDestroy();
}
private Runnable showTime = new Runnable() {
public void run() {
//log目前時間
Log.i("time:", new Date().toString());
handler.postDelayed(this, 1000);
}
};
}
4. main.xml(Layout)
<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <Button android:id="@+id/startButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Service" android:layout_x="40px" android:layout_y="67px" > </Button> <Button android:id="@+id/stopButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop Service" android:layout_x="140px" android:layout_y="67px" > </Button> </AbsoluteLayout>
5. AndroidManifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.me.android_spinner">
<application>
<activity android:name=".MainActivity" android:label="MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".NickyService"/>
</application>
</manifest>
6. 執行之後的畫面。

@@a 你沒有在 AndroidManifest 中加入 Service 喔....
回覆刪除請問為何 start 和 stop service 用的是不同的 intent ..
回覆刪除這樣 stopService 能正確 destroy 到 service 嗎?
您好..我是一個android的程式設計初學者,想請問一下..您是否會寫錄影程式??
回覆刪除