Android 中service的分类

Service可以分为:(两者都是运行在安卓手机当中的)
本地服务:指的是服务和启动服务的activity在同一个进程中

远程服务; 指的是服务和启动服务的activity不在同一个进程中。

启动本地服务用的是显式启动; 远程服务的启动要用到隐式启动。

远程服务启动:需要注意的是要先把远程的服务所在的项目启动起来,才能在其他项目中控制服务的启动。
远程服务的启动:

package com.zh.runremote;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intent = new Intent();
        intent.setAction("com.zh.remote");   //远程启动也即是隐式启动。  设置意图过滤器中的action方法要匹配

    }

    public void click(View v) {

        startService(intent);  // 启动服务。
    }

    public void click2(View v) {
        stopService(intent);  //关闭服务。

    }
}

在远程服务中调用远程方法,用到线程之间的通信。
AIDL: 英文名字是Android interface definition language 安卓接口定义语言。
作用:进程间通信;
用Aidl进行线程间通信的步骤:
1. 把远程服务的方法抽取成一个单独的接口java文件
2. 把接口java文件的后缀名改成aidl // 在项目的工作空间中改。
3. 在自动生成的PublicBusiness.java文件中,有一个静态抽象类Stub,它已经继承了binder类,实现了publicBusiness接口,这个类就是新的中间人
4. 把aidl文件复制粘贴到06项目,粘贴的时候注意,aidl文件所在的包名必须跟05项目中aidl所在的包名一致
5. 在06项目中,强转中间人对象时,直接使用Stub.asInterface()


将接口的名字改为aidl之后,系统会报错, aidl 的public去除,系统默认的就是public . 需要使定义的类继承Stub这个静态抽象类(它已经继承了binder类,实现了定义的接口)。

    class MyServiceconn implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //这个地方也是将IBinder对象转换成中间人PublicBusniess对象。
              pb =Stub.asInterface(service);

        }
        }

强转成中间人对象时使用Stub.asInterface();
使用于在不同的项目之间的线程通信,aidl. 点击某个按钮调用其他项目下的服务方法。改java文件的后缀名为aidl,复制到新的项目中原文件名不能变,在ServiceConnection的子类中实现onServiceConnected方法。
在MainActivity中调用远程服务:(远程服务需要进行bindService() 需要启动隐性服务。)

package com.zh.quanqiangame;

import com.zh.alipay.PayInterface;
import com.zh.alipay.PayInterface.Stub;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends Activity {
       private PayInterface pf;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent();
        intent.setAction("com.zh.paymoney");
        MyServiceconn conn = new MyServiceconn();
        bindService(intent, conn,BIND_AUTO_CREATE);

    }
    public void click(View v){
        try {
            pf.pay();
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    class MyServiceconn   implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub
            pf = Stub.asInterface(service);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub

        }

    }

}

进程优先级:
* 前台进程
* 拥有一个正在与用户交互的activity(onResume调用)的进程
* 拥有一个与正在和用户交互的activity绑定的服务的进程
* 拥有一个正在“运行于前台”的服务——服务的startForeground方法调用
* 拥有一个正在执行以下三个生命周期方法中任意一个的服务(onCreate(), onStart(), or onDestroy())
* 拥有一个正在执行onReceive方法的广播接收者的进程
* 可见进程
* 拥有一个不在前台,但是对用户依然可见的activity(onPause方法调用)的进程
* 拥有一个与可见(或前台)activity绑定的服务的进程
服务进程:
后台进程;
空进程;


样式和主题:
用于ui的设计;
values 中储存 都是资源文件. style的name就是资源id。
子节点是Item这个就是定义的样式所在。
定义的style:
自定义的额style通常用于组件中。

<style name="beijiangfengguang">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textSize">22sp</item>
        <item name="android:textColor">#00ff00</item>
  </style>

在组件中的应用:


    <TextView
        style="@style/beijiangfengguang"   //这里的style引用的就是自定义的样式。可以在自定义的样式中同一修改相同组建的属性。
        android:text="@string/hello_world" />

    <TextView
        style="@style/beijiangfengguang"
        android:text="@string/hello_world" />

    <TextView
        style="@style/beijiangfengguang"
        android:text="@string/hello_world" />

    <TextView
        style="@style/beijiangfengguang"
        android:text="@string/hello_world" />

    <TextView
        style="@style/beijiangfengguang"
        android:text="@string/hello_world" />

样式的继承:

<style name="nanjiang" parent="beijiangfengguang">
        <item name="android:textSize">28sp</item>   //对单独的样式进行修改。  
    </style>


   <style name="nanjiang.beijiangfengguang">    //这个也是对父类的继承。这种方法常用。 name就是资源id
         <item name="android:textColor">#ff0000</item> 

    </style>

在组件中引用时注意:

<TextView
        style="@style/nanjiang.beijiangfengguang"
        android:text="@string/hello_world" />

主题和样式定义方式是一样的 通常定义在values的styles中:用法的区别
样式用在布局文件中的组件上,主题用在activity 和application节点上。在清单文件中可以设置。

  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
       android:theme="@android:style/Theme.Black.NoTitleBar" >  //定义安卓的自带的主题。

自定义的主题:

 <style name="MyTheme">
        <item name="android:background">#ff0000</item>
  </style>

国际化:在resource文件下定义的文件夹里面定义strings.xml
就是定义 例如:values-en 英文
values-zh 中文
values-it 意大利文 跟随着系统设置的语言而定。
进一步的区域分化:例
values-en-rUS美式英文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值