其他分享
首页 > 其他分享> > 多线程——异步服务IntentService

多线程——异步服务IntentService

作者:互联网

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

===============================================================================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

布局:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn_intent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp"
        android:text="点我看看有没有反应"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <TextView
        android:id="@+id/tv_intent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:text="这里查看点击结果"
        android:textColor="@color/black"
        android:textSize="17sp" />

</LinearLayout>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码:

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;


@SuppressLint("SetTextI18n")
public class MainActivity extends AppCompatActivity implements View.OnClickListener

{
    private TextView tv_intent;
    private Handler mHandler = new Handler(Looper.myLooper()); // 声明一个处理器对象

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        tv_intent = findViewById(R.id.tv_intent);

        findViewById(R.id.btn_intent).setOnClickListener(this);

        mHandler.postDelayed(mService, 100); // 延迟100毫秒后启动异步任务
    }

    @Override
    public void onClick(View v)
    {
        if (v.getId() == R.id.btn_intent)
        {
            tv_intent.setText(DateUtil.getNowTime() + " 您轻轻点了一下下(异步服务正在运行,不影响您在界面操作)");
        }
    }

    private Runnable mService = new Runnable()
    {
        @Override
        public void run()
        {
            // 构建通往异步服务的意图
            Intent intent = new Intent(MainActivity.this, AsyncService.class);
            startService(intent); // 启动意图设定的异步服务
        }
    };

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AsyncService

 

package com.example.myapplication;

import android.content.Intent;
import android.app.IntentService;
import android.util.Log;

public class AsyncService extends IntentService
{
    private static final String TAG = "AsyncService";

    public AsyncService()
    {
        super("com.example.chapter11.service.AsyncService");
    }

    // onStartCommand运行于主线程
    public int onStartCommand(Intent intent, int flags, int startid)
    {
        Log.i(TAG, "onStartCommand");
        // 试试在onStartCommand里面沉睡,页面按钮是不是无法点击了?
//        try {
//            Thread.sleep(30*1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        return super.onStartCommand(intent, flags, startid);
    }

    // onHandleIntent运行于分线程
    protected void onHandleIntent(Intent intent)
    {
        Log.d(TAG, "begin onHandleIntent");
        // 在onHandleIntent这里执行耗时任务,不会影响页面的处理
        try
        {
            Thread.sleep(30 * 1000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        Log.d(TAG, "end onHandleIntent");
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DateUtil
package com.example.myapplication;

import android.annotation.SuppressLint;
import android.text.TextUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

@SuppressLint("SimpleDateFormat")
public class DateUtil
{
    // 获取当前的日期时间
    public static String getNowDateTime(String formatStr)
    {
        String format = formatStr;
        if (TextUtils.isEmpty(format))
        {
            format = "yyyyMMddHHmmss";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date());
    }

    // 获取当前的时间
    public static String getNowTime()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return sdf.format(new Date());
    }

    // 获取当前的时间(精确到毫秒)
    public static String getNowTimeDetail()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
        return sdf.format(new Date());
    }

    public static String getNowDate()
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        return sdf.format(new Date());
    }

    public static String getDate(Calendar calendar)
    {
        Date date = calendar.getTime();
        // 创建一个日期格式化的工具
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 将当前日期时间按照指定格式输出格式化后的日期时间字符串
        return sdf.format(date);
    }

    public static String getMonth(Calendar calendar)
    {
        Date date = calendar.getTime();
        // 创建一个日期格式化的工具
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 将当前日期时间按照指定格式输出格式化后的日期时间字符串
        return sdf.format(date);
    }

    public static Date formatString(String strTime)
    {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try
        {
            date = sdf.parse(strTime);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return date;
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:异步,sdf,SimpleDateFormat,IntentService,import,new,android,多线程,public
来源: https://www.cnblogs.com/xiaobaibailongma/p/16515190.html