android中的Service服务开发和理解
2017/3/13 记载
四大组件之Service服务
服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程中。服务:是实现android中实现程序后台运行的解决方案。它很适合去执行那些不需要在用户交互中长期运行的任务。
并且实际上服务是不会自动开启线程,所有服务代码都是运行在主线程上的,所以我们需要手动创建子线程。
继承:直接实现runable接口或者继承Thread父类(子线程run方法中),启动start()线程。
继承方式:New MyThread().start(); 实现接口方法:new Thread(MyThread).start();
和很多UI库一样。android的UI库也是线程不安全的,所以想要更新应用程序当中的UI元素,
则必须在主线程中进行,否则就会出现异常。
我们写一个小例子看看就知道了
activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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"
tools:context="com.example.ldp.com.androidthreadtest.MainActivity">
<Button
android:id="@+id/change_text"
android:text="Change Text"
android:textAllCaps="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text"
android:layout_centerInParent="true"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
MainActivity
package com.example.ldp.com.androidthreadtest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView)findViewById(R.id.text);
Button button = (Button)findViewById(R.id.change_text);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
text.setText("Nice to meet you");
}
}).start();
}
});
}
}
效果图:
用android中自带的异步消息处理的使用方法来更新UI就可以解决了
改一下代码: MainActivity
package com.example.ldp.com.androidthreadtest;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends A