Android开发从0开始(服务)

Android后台运行的解决方案,不需要交互,长期运行。

服务基础框架:

public class MyService extends Service {

public MyService() {

}

@Override

public IBinder onBind(Intent intent) {

//activity与service交互(需要继承)

// TODO: Return the communication channel to the service.

throw new UnsupportedOperationException("Not yet implemented");

}

public void onCreate(){

//创建服务时定义

super.onCreate(); }

public int onStartCommand(Intent intent,int flags,int startId)

{

//启动服务时调用

return super.onStartCommand(intent,flags,startId);

}

public void onDestroy(){

//销毁服务时调用

super.onDestroy();

} }

Android多线程

方法一:

①继承Thread,重写run()方法

Class MyThread extends Thread{

Public void run( ){ // 处理具体的逻辑}

}

②启动线程,new MyThread( ).start( );

方法二:

①使用Runable 接口定义线程

Class MyThread implements Runnable{

Public void run( ) {// 处理具体的逻辑 }

}

②启动线程,

MyThread myThread = new MyYhread( );

New Thread(my Thread ).start( );

匿名类简写:

在子线程中更新UI

如果直接在子线程中修改UI会导致系统崩溃,因为UI线程是不安全的。所以采用异步消息处理机制。示例:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

public static final int UPDATE_TEXT=1;

private TextView text;

private Handler handler = new Handler(){

public void handleMessage(Message msg)

{

switch (msg.what){

case UPDATE_TEXT:

//UI修改部分

text.setText("NICE TO MEET YOU");

break;

default:

break; } } };

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

text = (TextView) findViewById(R.id.text);

Button changeText= (Button) findViewById(R.id.change_text);

changeText.setOnClickListener(this);

}

@Override

public void onClick(View v) {

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

new Thread(new Runnable() {

@Override

public void run() {

Message message = new Message();

message.what = UPDATE_TEXT;

handler.sendMessage(message);

}

}).start();

}

}

}

异步消息处理机制 :主要由4个部分组成:Message、Handler、MessageQueue和Looper。

Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交

换数据。上一小节中我们使用到了Message的what字段,除此之外还可以使用arg1和arg2字段来携带一些整型数据,使用obj字段携带一个 object对象。

Handler 顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是

使用Handler 的sendMessage()方法, 而发出的消息经过一- 系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。

MessageQueue 是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。

Looper 是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到

一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。

异步消息封装工具AsyncTask:

AsyncTask抽象类,需要子类继承,一共三个泛型

简单定义AsyncTask:

Class DownloadTask extends AsynTask<Void, Integer, Boolean >{....}

这里我们把AsyncTask的第-一个泛 型参数指定为Void,表示在执行AsyncTask的时候不需

要传人参数给后台任务。第二个泛型参数指定为Integer,表示使用整型数据来作为进度显示单位。第三个泛型参数指定为Boolean, 则表示使用布尔型数据来反馈执行结果。

经常需要重写onPreExecute( ),doInBackground(params.. ),

onProgressUpdate(params.. ), onPostExecute(Result)

前台服务: 会一直有一个正在运行的图标在系统状态栏显示。

IntentService类封装了自动开启线程,调用stopSelf( )方法。

相关推荐
CYRUS_STUDIO6 小时前
Frida 检测与对抗实战:进程、maps、线程、符号全特征清除
android·逆向
csj507 小时前
安卓基础之《(28)—Service组件》
android
lhbian9 小时前
PHP、C++和C语言对比:哪个更适合你?
android·数据库·spring boot·mysql·kafka
catoop10 小时前
Android 最佳实践、分层架构与全流程解析(2025)
android
ZHANG13HAO10 小时前
Android 13 特权应用(Android Studio 开发)调用 AOSP 隐藏 API 完整教程
android·ide·android studio
田梓燊11 小时前
leetcode 142
android·java·leetcode
angerdream11 小时前
Android手把手编写儿童手机远程监控App之JAVA基础
android
菠萝地亚狂想曲11 小时前
Zephyr_01, environment
android·java·javascript
sTone8737512 小时前
跨端框架通信机制全解析:从 URL Schema 到 JSI 到 Platform Channel
android·前端
sTone8737512 小时前
Java 注解完全指南:从 "这是什么" 到 "自己写一个"
android·前端