关于android:后台服务-Andorid开发期末复习3

Service比Activity具备更高的优先级
Service的应用形式

  1. 启动形式
  2. 绑定形式
    应用通过服务链接(Connction)实现
    应用Service的组件通过Context.bindService()建设连贯,通过Context.unbindService()断开连接

如何实现Service()?

public class RandomService extends Service{
    
    @Override
    public void onCreate() {
        super.onCreate();
       //实现代码
    }
    
    @Override
    public void onStart(Intent intent, int startId) {
          super.onStart(intent, startId);
         //实现代码
    }
    
    @Override
    public void onDestroy() {
         super.onDestroy();
        //实现代码 
    }
     
    
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

Service被绑定后调用的函数,可能返回Service的对象实例:

public IBinder onBind(Intent intent){
return Service的对象实例
}

Service的对象实例怎么写?

实现Service类须要在AndroidManifest.xml注册服务

<service android:name=".RandomService"/>

在其余组件启动服务

显示启动

final Intent serviceIntent = new Intent(this, RandomService.class);
startService(serviceIntent);
stopService(serviceIntent);

隐式启动

final Intent serviceIntent = new Intent();
serviceIntent.setAction("edu.hrbeu.RandomService");//传递参数是Service 的包名地位

除此之外还要在AndroidManifest.xml申明,让启动找到相应的服务

<service android:name=".RandomService">
    <intent-filter>
          <action android:name="edu.hrbeu.RandomService"/> 
    </intent-filter>
</service>

Activity,Service,BroadcastReceiver都是工作在主线程
如何创立子线程?

  1. 实现java的Runnable接口,重载run()函数
  2. 创立Thread对象,将Runnable对象作为参数传递给Thread对象
  3. 启动线程是Thread对象调用start()办法;
  4. 如何终止线程?调用interrupt()办法;

如何应用线程中的数据更新用户界面?

用Handler更行用户界面

新建Handler实例,通过post()办法将Runnable对象从后盾线程发送到GUI线程的音讯队列

private static Handler handler = new Handler();
public static void UpdateGUI(double refreshDouble){
        randomDouble = refreshDouble;
        handler.post(RefreshLable);
    }
    
    private static Runnable RefreshLable = new Runnable(){
        @Override
        public void run() {
            labelView.setText(String.valueOf(randomDouble));
        }
    };
  • 如何让一般函数能够变成线程函数?实现接口Runnable()中对应的run()办法,函数的实现的办法写在run()中。
  • 启动线程须要创立Thread对象,将线程函数作为参数传递给Thread对象,通过Thread对象操纵线程的启动和暂停
  • 将线程中的数据更新到用户界面,就是借助Handler,先创立一个Handler实例,handler()通过post()办法:handelr.post([线程函数名]) ,将线程函数作为参数传递过来,这样线程函数就会被退出到GUI的线程音讯队列中,期待被执行。

如何绑定服务?

final Intent serviceIntent = new Intent(SimpleMathServiceDemoActivity.this,MathService.class);
bindService(serviceIntent,mConnection,Context.BIND_AUTO_CREATE);

private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder binder) {
            mathService = ((MathService.LocalBinder).binder).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mathService = null;    
        }
    };

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理