android学习笔记(三)

来源:互联网 发布:nginx动静分离配置 编辑:程序博客网 时间:2024/06/17 19:01

认识Service

  • 启动服务:
`startService(new Intent(MainActivity.this,MyService.class));`
  • 结束服务:
stopService(new Intent(MainActivity.this,MyService.class));

绑定服务

除了startService外,还可以通过绑定的方式启动服务。

新建一个Service

public class MyService extends Service {    public MyService() {    }    @Override    public IBinder onBind(Intent intent) {        // TODO: Return the communication channel to the service.        return new Binder();    }//在启动了服务后执行该方法    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        new Thread(){            @Override            public void run() {                super.run();                while(true){                System.out.println("服务正在运行");                try {                    sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }            }        }.start();        return super.onStartCommand(intent, flags, startId);    }}

MainAvtivity

private Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main1);        intent = new Intent(MainActivity.this,MyService.class);        findViewById(R.id.btn_service).setOnClickListener(this);//服务的实例在一个操作系统中只可能有一个        findViewById(R.id.btn_stopService).setOnClickListener(this);        findViewById(R.id.bindService).setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btn_service:                startService(intent);                break;            case R.id.btn_stopService:                stopService(intent);                break;            case R.id.bindService://                参数(intent,连接状态量,)                bindService(intent,this, Context.BIND_AUTO_CREATE);                break;            case R.id.unbingService:                unbindService(this);                break;        }    }//服务绑定成功之后执行    @Override    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {        System.out.println("服务已经绑定");    }//服务所在进程崩溃或者杀死的时候开始    @Override    public void onServiceDisconnected(ComponentName componentName) {    }

xml视图

<Button    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/btn_service"    android:text="启动服务"    />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/btn_stopService"        android:text="停止服务"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/bindService"        android:text="绑定服务"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/unbingService"        android:text="解绑服务"        />

与Service进行通信

启动Service并传递数据

其实和activity内部的传递数据一样,不过是传递数据的对象变成了Service。

MainActivity

package com.example.myapplication;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {    private Intent intent;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main1);        editText = (EditText) findViewById(R.id.editText_service);        intent = new Intent(MainActivity.this,MyService.class);        findViewById(R.id.btn_service).setOnClickListener(this);//服务的实例在一个操作系统中只可能有一个        findViewById(R.id.btn_stopService).setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btn_service://                利用service传递数据                intent.putExtra("data",editText.getText().toString());                startService(intent);                break;            case R.id.btn_stopService:                stopService(intent);                break;        }    }//服务绑定成功之后执行    @Override    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {        System.out.println("服务已经绑定");    }//服务所在进程崩溃或者杀死的时候开始    @Override    public void onServiceDisconnected(ComponentName componentName) {    }}

新建一个Service

package com.example.myapplication;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.provider.Settings;import android.widget.EditText;public class MyService extends Service {    private boolean running = false;    private String data = "123";    public MyService() {    }    @Override    public IBinder onBind(Intent intent) {        // TODO: Return the communication channel to the service.        return new Binder();    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {//        service接收数据        data = intent.getStringExtra("data");        return super.onStartCommand(intent, flags, startId);    }    @Override    public void onCreate() {        super.onCreate();        running = true;        new Thread(){            @Override            public void run() {                super.run();                while(running){                    System.out.println(data);                    try {                        sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }.start();    }    @Override    public void onDestroy() {        super.onDestroy();        running = false;    }}

xml视图

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/editText_service"        android:text="默认信息"        /><Button    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/btn_service"    android:text="启动服务"    />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/btn_stopService"        android:text="停止服务"        /></LinearLayout>
原创粉丝点击