Android Service
来源:互联网 发布:河南大学软件学院图片 编辑:程序博客网 时间:2024/06/13 09:45
1、Service需要掌握线程
感谢大神goeasyway的知识分享,配合食用更佳!
简书地址:http://www.jianshu.com/p/7a7db9f8692d
package weizhengzhou.top.interview.ThreadDemo;import android.os.Handler;import android.os.Message;/** * Are you known Thread? * 1、博大精深,百度一下 * 2、进程是资源分配的最小单位。Thread是程序执行流的最小单位 * 3、一个进程可以开启n个线程,n个线程共享进程资源 *//** * 使用Handler机制更新UI * 1、线程中通过调用Handler类实例的sendMessage方法设置通知消息 * 2、通过创建Handler实例时,重写handleMessage(Message msg)方法来实现UI更新 * 3、具体为通过switch(msg.what)点消息进行比对,当获取的消息为线程中设置的消息时,则执行具体业务逻辑。 */public class MyThread extends Thread{ private Handler mHandler = null; private int mgsWhat ; public MyThread(Handler handler , int mgs){ mHandler = handler; mgsWhat = mgs; }; @Override public void run() { Message message = new Message(); message.what = mgsWhat; mHandler.sendMessage(message); }}//实现Runnable接口class MyThread2 implements Runnable{ @Override public void run() { //处理具体业务逻辑 System.out.print("测试线程"); }}//继承Thread实现线程class MyThread3 extends Thread { @Override public void run() { //处理具体业务逻辑 //实现Runnable接口开启线程方法 new Thread(new MyThread2()).start(); } /** * 测试线程开启的方式 */ public static void main(String[] args){ //继承Thread开启方法 new MyThread3().start(); }}
2、实现在Service开启线程并进行UI操作
MyService:
package weizhengzhou.top.interview.ServiceDemo;import android.app.Service;import android.content.Context;import android.content.Intent;import android.os.Binder;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.support.annotation.Nullable;import android.util.Log;import android.widget.Toast;/** * Created by 75213 on 2017/7/10. * Are you known Service ? * 1、Service是实现Android程序后台运行的解决方案。 * 2、Service是一个专门在后台处理长时间任务的Android组件。 * 3、service没有UI,适合处理不需要和用户交互但是要求长期运行的任务 * * Attention * 1、Service不会自动开启线程,所有代码都在主线程中运行 * 2、使用Service处理耗时任务需要我们在Service内部手动创建子线程,否则可能出现主线程阻塞情况。 * * So? * * Precondition grasp thread knowledge * Study thread [ThreadDemo] */public class MyService extends Service{ //Handler sendMessage的信息 private static final int TEST_DATA = 3; //上下文参数即MainActivity.getBaseContent(); private Context mContext; private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case TEST_DATA: Toast.makeText(mContext , "测试" , Toast.LENGTH_LONG).show(); break; default: break; } } }; //继承Binder,提供给Service的onBind()方法。 class MyBinder extends Binder{ //Service中的自定义方法 //Binder我对它的假设理解为Web代码 public void testM(final Context textView){ new Thread(new Runnable() { @Override public void run() { mContext = textView; Message message = new Message(); message.what = TEST_DATA; mHandler.sendMessage(message); stopSelf(); } }).start(); Log.i("Test" , "TestServiceDemo"); } } /** * 会在服务创建的时候调用 */ @Override public void onCreate() { super.onCreate(); } /** * 会在每次服务启动的时候调用 */ @Override public int onStartCommand(Intent intent,int flags, int startId) { return super.onStartCommand(intent, flags, startId); } //会在服务销毁的时候调用 @Override public void onDestroy() { super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { //返回Binder //这里理解为将自己写的Web代码提交到tomcat服务器 return new MyBinder(); }}
MyServiceConnection:
package weizhengzhou.top.interview.ServiceDemo;import android.content.ComponentName;import android.content.Context;import android.content.ServiceConnection;import android.os.IBinder;/** * Created by 75213 on 2017/7/10. * 客户端绑定到一个service必须实现ServiceConnection * 在调用bindService时候需要设置(Intent , ServiceConnection , flags) */public class MyServiceConnection implements ServiceConnection{ private MyService.MyBinder mIBinder; private Context mTextView; public MyServiceConnection(Context textView){ mTextView = textView; } /** * 系统调用这个来传送在service的onBind()中返回的IBinder. * @param name * @param service */ @Override public void onServiceConnected(ComponentName name, IBinder service) { mIBinder =(MyService.MyBinder)service; //通过引用就可以对Binder中定义的方法进行访问 mIBinder.testM(mTextView); } //Android系统在同service的连接意外丢失时调用这个.比如当service崩溃了或被强杀了.当客户端解除绑定时,这个方法不会被调用. @Override public void onServiceDisconnected(ComponentName name) { mIBinder = null; }}
MainActivity :
package weizhengzhou.top.interview;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import weizhengzhou.top.interview.ServiceDemo.MyService;import weizhengzhou.top.interview.ServiceDemo.MyServiceConnection;import static weizhengzhou.top.interview.R.id.testButton;public class MainActivity extends AppCompatActivity { private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button)findViewById(testButton); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取Service意图 Intent intent = new Intent(MainActivity.this , MyService.class); //进行绑定 bindService(intent , new MyServiceConnection(MainActivity.this.getBaseContext()) , BIND_AUTO_CREATE); } }); }}
阅读全文
0 0
- [android]service中再启service
- android service
- Android Service
- android service
- Android Service
- Android service
- android service
- Android Service
- Android Service
- Android service
- Android:Service
- Android Service
- [Android] Service
- android service
- android service
- android service
- android service
- Android Service
- android studio: Plugin with id 'com.jfrog.bintray' not found.
- CSDN日报20170710——《小公司程序员怎么进大公司》
- 【技能库】--mysql 索引失效 force index也失效-- 原因解决方案(256)
- 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题
- 公钥和密钥解释
- Android Service
- 数据的转换,我的代码(垃圾)和我的师傅的代码!
- markdowng
- Common Lisp环境篇(slime+sbcl)
- PHP之FTP、SFTP上传下载
- WebService基础学习(一)—基础知识
- Android 使用富文本显示web上的内容
- JVM垃圾收集器
- Python中list,tuple,dict,set基本定义和基本用法