android杀死进程自动开启了窗口,android service 服务 bind start 两种启动方法 PendingIntent 将界面放入通知栏中...

***************************

服务

***************************

服务是运行在后台的。

1.前台进程,

2.可见进程

3.服务进程(当系统内存资源过少得时候,会将其杀掉??

?有机制可以保证服务不被杀死)

4.后台进程

5.空进程

进程之间是如何通讯的IPC

消息队列

主线程执行消息队列,依次执行消息队列中的消息

若服务是运行在主线程中,则若运行时间超过5秒,则会ANR

除了主线程以外是不能更改界面的。

只要不是一个线程,就不能改变界面。

Toast不素界面元素,是一个消息。

handler

异步任务

音乐播放器

前台服务,前台服务才不会被系统销毁。用通知放在了前台

进程。

timer隔一段时间去服务上取数据

闹钟管理器

手机休眠的时候服务要不要停止(要考虑的...)

worklock 屏幕黑掉,但线程在运行

新建一个工程

新建一个类继承service类

startComment具体处理服务所执行的动作。

android:name=".类名">

private Button startButton;

startButton = find...();

startButton.setOnclickeListener(this);

onclick(){

if(v.getId()==R.id.startButton){

Intent in = ;

startService(in);

}else{

stopService(in)

}

}

startComm(){

Thread.currentThread.getName();

}

同时在主线程中输出:Thread.currentThread.getName();

都输出main

anr:not responsed

startComment

new Thread(){

public void run(){

for(){

Tread.sleep(6000);

}

}

}

与直接在start中sleep(6000);

的区别

后者会出现anr,前者不会。

但此时服务和新建的线程是两个异步的线程,即,若服务停

止掉,线程不会被停止。

此时可使用标量,使新建的线程停止。

stopSelf();结束本身。

android 对每个进程分配的cup是一样的 一般来说16M

当前应用程序的进程

android.os.Process.myPid();

完全停止整个应用程序

android.os.Process.killProcess

(android.os.Process.myPid());

新建一个服务继承service

在服务和activity之间进行通信

IBinder onBind(){

return new LocalBind();

}

//在本地,同一个线程中可进行通信

//aidl,在不同进程中可进行通信

public class LocalBind extends Binder{

public SecondServide getService(){

return

SecondSercive.this;

}

}

SecondService ss ;

ServiceConnection conn = new ServiceConnection();//

定义为全局变量,生命周期问题

LocalBind bind = service;

ss = bind.getService();

bindButton.seton...(){

isBind = bindService

(intent,,BIND_AUTO_CREATE);/桥,连接/ //此方

法在一个新线程中执行

}

unbind...(){

unbindService(conn);

isBind = false;

}

sayhelloButton.Enable(false);

一个进程 里面可以有很多线程

同一个进程中的组件可以通过bind沟通

但不适合于进程和进程之间的通信,若为进程之间的通信需

要用aidl

无法获得服务的引用

对于服务的bind方法

在Activity中获得服务连接,定义为全局的。

public void onClick(View v) {

Intent intent = new

Intent(this,FirstService.class);

Intent intent2 = new

Intent(this,SecondService.class);

if(v.getId()==R.id.startButton){

startService(intent);

}else

if(v.getId()==R.id.stopButton){

// stopService(intent);

//停止服务

//销毁掉整个程序,包括缓存

android.os.Process.killProcess(android.os.Process.myPid());

//两种不同的销毁存在优先级,后者优先级比较高,在后者存在的情况下不会执行前者,直接销毁进程相关所有资源 }else

if(v.getId()==R.id.bindButton){

isBind =

bindService(intent2, conn, BIND_AUTO_CREATE);

if(isBind){

sayHelloButton.setEnabled(true);

}

}else

if(v.getId()==R.id.unbindButton){

unbindService(conn);

isBind =

false;

sayHelloButton.setEnabled(false);

}else

if(v.getId()==R.id.sayButton){

if(isBind){

System.out.println(ss.sayHello("张三"));

}

}

start交互以后,调用者和服务之间没有之间的关系

startcomment

生命周期,内存不够时,服务所在的进程是可以被关掉的。

避免这种情况

START_STICKY:粘性的,如果返回值为此种,服务所在的进

程被杀掉以后,系统会选择一个内存资源足够的时候将服务

的进程重启。重启服务会重新调用onCreate以及

onStartComment方法,但不会再次传入intent参数。若

intent此时带有参数传递,会报出intent空指针异常。

START_NOT_STICKY:不重启。

START_REDELIVER_INTENT,重启,并重新传递intent,以及其

他参数,若上次有7个startId,重启的时候也重启7个

startId;

三个参数(intent,int flags ,int startId)

startId:

return this.START_STICKY

配置文件中的.类名, .表示当前路径

第二种调用服务

隐式调用

Intent in = new Intent("包名");

配置文件中

模拟服务被干掉的场景

给一个button,button中销毁当前服务,服务会自动重启

启动的时候可以给服务带参数putExtra();

在服务端之间getExtra();

PendingIntent

intent 是请求对象,包含了某一种请求操作,要么是启动

一个activity,要么是启动一个Service;

PendingIntent 是对intent的一种包装。

PendingIntent 可以延迟执行请求操作。其执行可以在另外

的对象(其他的应用程序或组件)里面执行。比如说启动一

个activity,

A要求B做一件事情,B做完之后要触发A的一个操作。回调。

PendingIntent 即 封装回调的操作。

A中

in = new intent(A,B);

PendingIntent pin = PendingIntent.getActivity

(A,0,in,0);

Intent param = new Intent("服务");

Bundle bu = new Bundle();

("operate",pin);

startService(param);

取出服务

intent!=null{

para = intent.getExtras();

PendingIntent pin = param.getParcelable

("operate");

Thread.sleep();

pin.send();

}

通知

notify

图标

点击图标进入界面

点击界面进入一个activity

点击通知,能触发一个动作

动作是延迟的,

创建一个intent

创建一个pendingIntent

创建一条通知,

将通知加到通知栏里面去

main

NotificationManager nm;通知管理器;管理整个android中

的通知

nm = getSystemService(Context.NOTIFICTION_SERVICE);

按钮点击事件

Intent in (A,B);

PendingIntent pin = PendingIntent.getActivity(A,0,

in,0);

Notification note = new Notification

(R.draw.icon,"info",system.currentTimeMillis());

note.setLatesEventInfo(A,"标题一条短信","短信内容是

",pin);//设置通知的内容;

nm.notify(1,note);//将通知交给通知管理器。

我的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值