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

34次阅读

共计 2212 个字符,预计需要花费 6 分钟才能阅读完成。

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;}
    };

正文完
 0