安卓 service 后台运行,activity 启动和停止service

安卓activity界面,上面有两个按钮,一个是开始服务,一个是取消服务。

界面布局:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <TextView
12         android:id="@+id/textView1"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:text="@string/hello_world" />
16 
17 
18     <Button
19         android:id="@+id/quxiao"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:layout_below="@+id/textView1"
23         android:layout_marginTop="65dp"
24         android:text="取消服务" />
25 
26     <Button
27         android:id="@+id/bangding"
28         android:layout_width="wrap_content"
29         android:layout_height="wrap_content"
30         android:layout_alignBaseline="@+id/quxiao"
31         android:layout_alignBottom="@+id/quxiao"
32         android:layout_alignParentRight="true"
33         android:layout_marginRight="66dp"
34         android:text="开始服务" />
35 
36 </RelativeLayout>

activity的代码:

 1 package com.example.test2;
 2 
 3 import java.util.Date;
 4 
 5 import com.example.application.GlobalVaries;
 6 
 7 import android.os.Bundle;
 8 import android.os.Handler;
 9 import android.os.IBinder;
10 import android.app.Activity;
11 import android.content.ComponentName;
12 import android.content.Intent;
13 import android.content.ServiceConnection;
14 import android.view.View;
15 import android.view.View.OnClickListener;
16 import android.widget.Button;
17 import android.widget.TextView;
18 import android.widget.Toast;
19 
20 public class MainActivity extends Activity {
21     private boolean isBound = false;
22     TextView labelView;
23     private Intent serviceIntent;
24     private GlobalVaries global;
25 
26     @Override
27     protected void onCreate(Bundle savedInstanceState) {
28         super.onCreate(savedInstanceState);
29         setContentView(R.layout.activity_main);
30         global = (GlobalVaries) getApplication();
31         labelView = (TextView) findViewById(R.id.textView1);
32         Button bindButton = (Button) findViewById(R.id.bangding);
33         Button unbindButton = (Button) findViewById(R.id.quxiao);
34         
35         myMainRunning();
36         // 绑定按钮
37         bindButton.setOnClickListener(new OnClickListener() {
38             @Override
39             public void onClick(View v) {
40                 if (!isBound) {
41                     serviceIntent = new Intent(MainActivity.this,
42                             MyService.class);
43                     MainActivity.this.startService(serviceIntent);
44                     isBound = true;
45                     
46                 }
47             }
48         });
49         // 取消绑定按钮
50         unbindButton.setOnClickListener(new View.OnClickListener() {
51             @Override
52             public void onClick(View v) {
53                 onDestroy();
54                 System.exit(0);
55                 finish();
56             }
57         });
58 
59     }
60     
61     private void myMainRunning() {
62         final Handler handler = new Handler();  
63         Runnable runnable = new Runnable(){  
64              @Override  
65              public void run() {  
66                  // 在此处添加执行的代码   
67                  
68                  long nowTime = global.getNowTime();
69                  labelView.setText(""+new Date(nowTime));
70                  handler.postDelayed(this, 500);// 50是延时时长   
71              }   
72          };   
73          handler.postDelayed(runnable, 1000);// 打开定时器,执行操作   
74          handler.removeCallbacksAndMessages(this);// 关闭定时器处理  
75     }
76 
77     @Override
78     protected void onDestroy() {
79         MainActivity.this.stopService(serviceIntent);
80         super.onDestroy();
81     }
82     
83     
84 }

服务部分的代码:

 1 package com.example.test2;
 2 
 3 import java.util.Date;
 4 
 5 import com.example.application.GlobalVaries;
 6 
 7 import android.app.Service;
 8 import android.content.Intent;
 9 import android.os.Handler;
10 import android.os.IBinder;
11 import android.util.Log;
12 import android.widget.Toast;
13 
14 public class MyService extends Service {
15 
16     private GlobalVaries global;
17         
18     @Override
19     public void onCreate() {
20         Log.i("start", "MyService onCreate");
21         global = (GlobalVaries) getApplication();
22         myrunningProgram();
23         super.onCreate();
24     }
25 
26     private void myrunningProgram() {
27         final Handler handler = new Handler();  
28             Runnable runnable = new Runnable(){  
29                  @Override  
30                  public void run() {  
31                      // 在此处添加执行的代码   
32                      Toast.makeText(MyService.this, ""+new Date(), 
33                              Toast.LENGTH_SHORT).show();
34                      global.setNowTime(System.currentTimeMillis());
35                      handler.postDelayed(this, 2000);// 50是延时时长   
36                  }   
37              };   
38              handler.postDelayed(runnable, 1000);// 打开定时器,执行操作   
39              handler.removeCallbacksAndMessages(this);// 关闭定时器处理  
40 
41     }
42 
43     //开启绑定
44     @Override
45     public IBinder onBind(Intent arg0) {
46         //为了使Service支持绑定,需要在Service类中重载onBind()方法,并在onBind()方法中返回Service对象
47         Toast.makeText(this, "本地绑定:MyService", 
48                 Toast.LENGTH_SHORT).show();
49         System.out.println("----2");
50         
51         return null;
52     }
53 
54     //取消绑定
55     @Override
56     public boolean onUnbind(Intent intent) {
57         Toast.makeText(this, "取消本地绑定:MyService", 
58                              Toast.LENGTH_SHORT).show();  
59         System.out.println("----3");
60         return false;
61     }
62 
63     
64 }

根据需求可以修改相应部分的代码。以上代码就是为了实现自己的需求。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。