Android Service服务-(转)
Service是Android系统中提供的四大组件之一。它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互。
1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。
采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。
- public class LocalService extends Service {
- private static String info = null;
- private String TAG = "localservice";// 定义打印信息标识
- private NotificationManager mNM;// 定义状态栏通知
- private final IBinder mBinder = new LocalBinder();// 实例化LocalBinder
- // public static native void getSqlInfo();
- public class LocalBinder extends Binder {
- LocalService getService() {
- return LocalService.this;
- }
- }
- public IBinder onBind(Intent intent) {
- Log.i(TAG, "this is onBind");
- return mBinder;
- }
- // 实现创建方法
- public void onCreate() {
- Log.i(TAG, "this is onCreate");
- mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);// 获取通知栏管理器
- }
- // 实现开始方法
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.i(TAG, "received start id" + startId + ":" + intent);
- // 开启线程
- MessageThread messageThread = new MessageThread();
- messageThread.start();
- return START_STICKY;
- }
- // 实现销毁方法
- public void onDestory() {
- Log.i(TAG, "this is onDestory");
- mNM.cancel("qqq", 0);
- }
- // 实现解除bind方法
- public boolean onUnbind(Intent intent) {
- Log.i(TAG, "this is onUnbind");
- return super.onUnbind(intent);
- }
- private void showNotification(String serverMessage) {
- int icon = R.drawable.icon; // 通知图标
- CharSequence tickerText = "local sevice has started" + serverMessage; // 状态栏显示的通知文本提示
- long when = System.currentTimeMillis(); // 通知产生的时间,会在通知信息里显示
- // 用上面的属性初始化Nofification// 实例化状态通知
- Notification notification = new Notification(icon, tickerText, when);
- PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
- new Intent(this, HelloPush.class), 0);// 定义通知栏单击时间触发的intent
- notification.defaults |= Notification.DEFAULT_SOUND;// 添加声音
- // notification.defaults |= Notification.DEFAULT_VIBRATE;// 添加震动
- notification.defaults |= Notification.DEFAULT_LIGHTS;// 添加LED灯提醒
- notification.flags = Notification.FLAG_AUTO_CANCEL;// 在通知栏上点击此通知后自动清除此通知
- notification.setLatestEventInfo(this, "Local Service", tickerText,
- contentIntent);// 设置该状态栏通知消息的单击事件
- mNM.notify("qqq", 0, notification);// 通知栏显示该通知
- }
- /**
- * 从服务器端获取消息
- *
- */
- class MessageThread extends Thread {
- // 运行状态,下一步骤有大用
- public boolean isRunning = true;
- @SuppressLint("SimpleDateFormat")
- public void run() {
- System.out.println("running++++++++++++++");
- while (isRunning) {
- try {
- // 获取服务器消息
- String serverMessage = getServerMessage();
- SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
- Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
- String str = formatter.format(curDate);
- System.out.println("++++++++++++" + str);// &&str=="08:00"
- if (serverMessage != null && !"".equals(serverMessage)
- // &&"15:00".equalsIgnoreCase(str)
- ) {
- showNotification(serverMessage);
- }
- // 休息1分钟
- System.out.println("sleeping now+++++");
- Thread.sleep(60000);
- System.out.println("sleep ended+++++");
- } catch (InterruptedException e) {
- System.out.println("thread sleep error++++");
- e.printStackTrace();
- }
- }
- }
- }
- /**
- * @return 返回服务器要推送的消息,否则如果为空的话,不推送
- */
- public String getServerMessage() {
- System.out.println("getServerMessage++++++++");
- info = null;
- // getSqlInfo();
- // getSql();
- info = connecting();
- System.out.println("getServerMessage+++++++" + info);
- return info;
- }
- // public static int ReturnInfo(final String title) {
- // System.out.println("ReturnInfo+++++++++" + title);
- // info = title;
- // return 1;
- // }
- //
- // public void getSql() {
- // try {
- // String url = "jdbc:mysql://192.168.1.104:80/test";
- // String user = "root";
- // String pwd = "";
- //
- // // 加载驱动,这一句也可写为:Class.forName("com.mysql.jdbc.Driver");
- // Class.forName("com.mysql.jdbc.Driver").newInstance();
- // // 建立到MySQL的连接
- // Connection conn = DriverManager.getConnection(url, user, pwd);
- //
- // // 执行SQL语句
- // java.sql.Statement stmt = conn.createStatement();// 创建语句对象,用以执行sql语言
- // ResultSet rs = stmt.executeQuery("select * from push where id = 1");
- //
- // // 处理结果集
- // while (rs.next()) {
- // String name = rs.getString("name");
- // info = name;
- // System.out.println(name);
- // }
- // rs.close();// 关闭数据库
- // conn.close();
- // } catch (Exception ex) {
- // System.out.println("Error : " + ex.toString());
- // }
- // }
- public String connecting() {
- /* 存放http请求得到的结果 */
- String result = "";
- // String ss = null;
- String name = null;
- /* 将要发送的数据封包 */
- ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
- nameValuePairs.add(new BasicNameValuePair("id", "1"));
- InputStream is = null;
- // http post
- try {
- /* 创建一个HttpClient的一个对象 */
- HttpClient httpclient = new DefaultHttpClient();
- /* 创建一个HttpPost的对象 */
- HttpPost httppost = new HttpPost(
- "http://192.168.1.104:80/ying/yy.php");
- /* 设置请求的数据 */
- httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- /* 创建HttpResponse对象 */
- HttpResponse response = httpclient.execute(httppost);
- /* 获取这次回应的消息实体 */
- HttpEntity entity = response.getEntity();
- /* 创建一个指向对象实体的数据流 */
- is = entity.getContent();
- } catch (Exception e) {
- System.out.println("Connectiong Error");
- }
- // convert response to string
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- is, "iso-8859-1"), 8);
- StringBuilder sb = new StringBuilder();
- String line = null;
- while ((line = reader.readLine()) != null) {
- sb.append(line + "/n");
- }
- is.close();
- result = sb.toString();
- System.out.println("get = " + result);
- } catch (Exception e) {
- System.out.println("Error converting to String");
- }
- // parse json data
- try {
- /* 从字符串result创建一个JSONArray对象 */
- JSONArray jArray = new JSONArray(result);
- for (int i = 0; i < jArray.length(); i++) {
- JSONObject json_data = jArray.getJSONObject(i);
- System.out.println("Success");
- System.out.println("result " + json_data.toString());
- // ct_id=json_data.getInt("id");
- name = json_data.getString("name");
- // if (i == 0) {
- // ss = json_data.toString();
- // } else {
- // ss += json_data.toString();
- // }
- }
- } catch (JSONException e) {
- System.out.println("Error parsing json");
- }
- return name;
- }
- }
下面是php代码
- <?php
- require_once("conn.php");
- session_start();
- $q=mysql_query("SELECT name FROM push WHERE id='".$_REQUEST['id']."'");
- while($e=mysql_fetch_assoc($q))
- $output[]=$e;
- print(json_encode($output));
- mysql_close();
- ?>
Android Service服务-(转)的更多相关文章
- Android Service 服务(三)—— bindService与remoteService
(转自:http://blog.csdn.net/ithomer/article/details/7366396) 一.bindService简介 bindService是绑定Service服务, ...
- Android Service 服务
一. Service简介 Service是android 系统中的四大组件之一(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activi ...
- Android Service 服务(一)—— Service .
http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一(Activit ...
- [Android] Service服务详解以及如何使service服务不被杀死
排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...
- android service服务的学习
1.Service简单概述 Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件.服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即 ...
- Android Service 服务(二)—— BroadcastReceiver
(转自:http://blog.csdn.net/ithomer/article/details/7365147) 一. BroadcastReceiver简介 BroadcastReceiver,用 ...
- Android Service服务
Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互. 服务不能自己运行,需要通过调用Context.startService ...
- Android service 服务的应用之电话监听器以及短信监听器
首先建立一个项目工程文件,如下图所示:
- Android Service服务的生命周期
与activity类似,服务也存在生命周期回调方法,你可以实现这些方法来监控服务的状态变化,并在适当的时机执行一些操作. 以下代码提纲展示了服务的每个生命周期回调方法: public class Ex ...
- Android -- service 服务的创建与使用,生命周期,电话监控器
1. 为什么使用service 应用程序 : 一组组件(activity service provider receiver)的集合. 一般情况 一个应用程序 会对应一个进程. 一般情况 关闭掉应用 ...
随机推荐
- 【iview input 回车刷页面bug】input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-show false 就可以了
[iview input 回车刷页面bug]input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-sh ...
- win10 多桌面 win+tab | ctrl+win+左右箭头
win10 多桌面 win+tab | ctrl+win+左右箭头
- NYOJ-1057-寻找最大数(三)
http://acm.nyist.net/JudgeOnline/problem.php?pid=1057 寻找最大数(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描 ...
- 电脑上文件的后缀名被隐藏,把一个文本文件改成.bat时,默认打开的还是文本。
1.打开文件夹,选择组织,点击“文件夹和搜索选项”,如图: 2.选择“查看”,找到“隐藏已知文件类型的扩展名”,不要勾选这一项,如图: 3.点击“确定”或者“应用”
- js解析json格式
function save(){ var value2 = { "china":[ {"name":"hangzhou", "it ...
- shell脚本,awk常见初始化变量的题目。
文件 内容如下 clone=line1gb=line1gi=line1lib=line1gb=line2gi=line2lib=line2clone=line3gb=line3gi=line3lib= ...
- shell脚本,awk合并一列的问题。
文件 file2内容如下:0 qwert1 asdfghjk2 asdjkl2 zxcvbn3 dfghjkll4 222224 tyuiop4 bnm 让第一列相等的合并成一行,不要第一列,也就是变 ...
- 关于windows server 2003 IE 不能访问 https问题
https://xx.wosign.com/FAQ/Windows2003_server_sha256_support_problem.html 补丁地址: https://xx.wosign.com ...
- java在线聊天项目0.8版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能
迭代器的方式会产生锁定 服务器端增加发送给每个客户端已收到信息的功能 所以当获取到一个socket,并打开它的线程进行循环接收客户端发来信息时,我们把这个内部类的线程Client保存到集合List&l ...
- Django_外键查询和反查询
一.ForeignKey @property装饰器的作用是返回一个属性特性,在数据库中也有一些小技巧可以拿来用,比如今天要写的外键查询和反向查询的内容. from django.db import m ...