Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1051|回复: 0

【代码】Android后台程序应用技巧分享

[复制链接]

该用户从未签到

发表于 2013-8-21 18:54:03 | 显示全部楼层 |阅读模式
Android手机操作系统是由谷歌推出的一款开源的基于Linux平台的操作系统,深受广大编程爱好者的喜爱。在Android系统中我们一直在接触着前台界面程序,其实在一开始接触Android时就听说了,程序就有有界面和无界面之分。(PS:新建的QQ群,有兴趣可以加入一起讨论:Android学习交流群278744577,验证:xxz
Android后台程序就是这类无界面的程序,它在后台执行,没有影响你的界面。比如短信监听程序,执行在后台,当有短信时才给你们提示,振动或声音;比如闹钟,设定好时间后,在定时通知你;再比如mp3播放器,选择好音乐后,在待在后台唱着,当有电话来时,自动暂停,完后再继续播放。
其实分析下来,我们不难发现,Android后台程序跟前台程序是一样的,也就是在执行我们指定的程序,只是留给我们两个问题,1.因为没有界面,我们会问,怎么启动,怎么终止?2.因为没有界面,这程序如何通知我们一些信息或状态。
前面的学习让我们知道,一个Activity想Call另一个Activity时,只需要能过中介人Intent就可以了,同样我们与服务处理类打交道也是通过Intent来实现,当然,界面类是继承着Activity,而服务类则是继承着Service类。
启动服务:
  1. 1.// Implicitly start a Service
  2. 2.startService(new Intent(MyService.MY_ACTION));
  3. 3.// Explicitly start a Service
  4. 4.startService(new Intent(this, MyService.class));
复制代码
停止服务:
  1. 1.stopService(new Intent(this, MyService.class));
复制代码
同样,跟Activity一样的生命期中,系统也会自动跟据不同的状态来调用继承函数:
  1. 1.@Override
  2. 2.public void onCreate()
  3. 3.public IBinder onBind(Intent intent)
  4. 4.public void onStart(Intent intent, int startId)
  5. 5.。。。
复制代码
在实际的开发中,我们一般都不会直接写一个服务类,一般都会写一个与Android后台程序相配套的前台程序,一般的程序总会有一些配置吧~~,然后这个界面中就可以很方便地来控制后台程序的运作。
我们来回答第二个问题,就是在服务中我们怎么发起一个通知给用户,在Andorid中,提供了以下几种方式:
1. Toast
这是一个无模式的小窗体,会将显示的信息显示在首页面中:
实现代码是:
  1. 1.Context context = getApplicationContext();
  2. 2.String msg = “To the bride an groom!”;
  3. 3.int duration = Toast.LENGTH_SHORT;
  4. 4.Toast toast = Toast.makeText(context, msg, duration);
  5. 5.int offsetX = 0;
  6. 6.int offsetY = 0;
  7. 7.toast.setGravity(Gravity.BOTTOM, offsetX, offsetY);
  8. 8.toast.show();
复制代码
当然,你也可以显示更杂的,可以将一个控制直接当成一个Toast显示出来,也可以自定义一个控件显示出来,自定义控件的强大是大家都知道的~~
2. Notifications
这种方式是系统中比较通用的模式,通过这种方式你可以使系统:将一个图标在状态条上闪,让机器震动,发出声音等。
实现代码:
  1. 1.String svcName = Context.NOTIFICATION_SERVICE;
  2. 2.NotificationManager notificationManager;
  3. 3.notificationManager = (NotificationManager)getSystemService(svcName);
  4. 4.// Choose a drawable to display as the status bar icon
  5. 5.int icon = R.drawable.icon;
  6. 6.// Text to display in the status bar when the notification is launched
  7. 7.String tickerText = “Notification”;
  8. 8.// The extended status bar orders notification in time order
  9. 9.long when = System.currentTimeMillis();
  10. 10.Notification notification = new Notification(icon, tickerText, when);
  11. 11.Context context = getApplicationContext();
  12. 12.// Text to display in the extended status window
  13. 13.String expandedText = “Extended status text”;
  14. 14.// Title for the expanded status
  15. 15.String expandedTitle = “Notification Title”;
  16. 16.// Intent to launch an activity when the extended text is clicked
  17. 17.Intent intent = new Intent(this, MyActivity.class);
  18. 18.PendingIntent launchIntent = PendingIntent.getActivity(context, 0, intent, 0);
  19. 19.notification.setLatestEventInfo(context, expandedTitle,expandedText,launchIntent);
复制代码
触发方式:
  1. 1.int notificationRef = 1;
  2. 2.notificationManager.notify(notificationRef, notification);
复制代码
学会了Activity再写个Android后台程序也就不难了!!
这里顺便再提一下,在Android系统中也提供了多线程编程,我们知道不管是前台还是后台程序,都有生命期的,当程序不活动时,我们想继续让程序执行,这里我们需要用到线程了,在Android系统中使用线程,跟我们直接写java线程程序非常想似:
  1. 1.// This method is called on the main GUI thread.
  2. 2.private void mainProcessing() {
  3. 3.// 主程序中启动线程.
  4. 4.Thread thread = new Thread(null, doBackgroundThreadProcessing,
  5. “Background”);
  6. 5.thread.start();
  7. 6.}
  8. 7.// Runnable that executes the background processing method.
  9. 8.private Runnable doBackgroundThreadProcessing = new Runnable() {
  10. 9.public void run() {
  11. 10.//线程执行内容。。。
  12. 11.}
  13. 12.};
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2014-7-8 09:54:57 | 显示全部楼层

顶!同为IT爱好者。欢迎加入【鏖战八方】:http://jq.qq.com/?_wv=1027&k=KSNqmm   本群专注技术,软件工程、JAVA、c\c++、WEB、android、javascript、IOS。您的问题会得到及时解答,欢迎菜鸟、老鸟们的加入!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-20 18:05 , Processed in 0.408484 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表