【无标题】

在Android应用的线程中有几个Handler几个Lopper几个Message几个MessageQueue

在Android应用的线程中,通常会涉及以下概念:

1. **Handler:** 通常一个线程可以拥有多个Handler,每个Handler与特定的MessageQueue相关联,用于向该线程发送消息。你可以创建多个Handler对象,每个Handler与特定的Looper关联。

2. **Looper:** 每个线程都有一个Looper,它用于维护消息队列(MessageQueue)。通常,一个线程只有一个Looper。Looper的主要作用是不断地从MessageQueue中获取消息并将其分发给相应的Handler。

3. **MessageQueue:** 每个线程都有一个关联的MessageQueue,用于存储消息对象。这个队列按照消息的时间戳进行排序,以确保消息按顺序处理。

4. **Message:** 每个消息对象包含了要执行的操作和相关的数据。消息会被Handler发送到MessageQueue中,并在Looper处理时被分发到相应的Handler来执行操作。

总结一下:

- 通常,一个线程拥有一个Looper和一个MessageQueue。
- 一个线程可以有多个Handler,每个Handler与相同线程的Looper关联。
- Message对象是要在线程中执行的操作的封装。

这种设计使得Android应用可以轻松地进行线程间通信和处理异步任务,同时保持了线程的单一性,避免了多线程竞争和同步问题。

1. SingleTask模式的运用场景
最常见的应用场景就是保持我们应用开启后只有一个Activity的实例,最典型的例子就是应用中展示的主页(Home页)。假设用户在主页跳转到其它页面,执行多次操作后想返回到主页,如果不使用SingleTask模式,在点击返回的过程中会多次看到主页,这明显就是设计不合理了

. SingleTop模式的运用场景

如果你在当前的Activity中又要启动同类型的Activity,此时建议将此类型Activity的启动模式指定为SingleTop,可以减少Activity的创建,节省内存!比如消息聊天页面,当你收到个消息,如果消息页面在栈顶则不用创建否则需要创建下

#include <Windows.h>

// 窗口句柄
HWND g_hWnd = nullptr;

// 横屏和竖屏的标志
bool g_isLandscape = true;

// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_SIZE:
        // 检查窗口大小,以确定横屏或竖屏
        if (LOWORD(lParam) > HIWORD(lParam))
        {
            // 竖屏
            g_isLandscape = false;
        }
        else
        {
            // 横屏
            g_isLandscape = true;
        }
        // 在这里根据 g_isLandscape 来更新界面布局
        return 0;

    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        // 在这里绘制界面元素
        if (g_isLandscape)
        {
            // 横屏布局
            TextOut(hdc, 100, 100, L"Landscape Layout", 16);
        }
        else
        {
            // 竖屏布局
            TextOut(hdc, 100, 100, L"Portrait Layout", 14);
        }
        EndPaint(hWnd, &ps);
    }
    return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// 程序入口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 注册窗口类
    WNDCLASSEX wcex = { sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, WndProc, 0, 0, GetModuleHandle(nullptr), nullptr, nullptr, (HBRUSH)(COLOR_WINDOW + 1), nullptr, L"AdaptiveLayoutApp", nullptr };
    RegisterClassEx(&wcex);

    // 创建窗口
    g_hWnd = CreateWindow(L"AdaptiveLayoutApp", L"Adaptive Layout App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, GetModuleHandle(nullptr), nullptr);

    if (!g_hWnd)
    {
        return FALSE;
    }

    // 显示窗口
    ShowWindow(g_hWnd, nCmdShow);
    UpdateWindow(g_hWnd);

    // 主消息循环
    MSG msg = {};
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值