B2B网络软件

 找回密码
 立即注册 审核网站号:QQ:896757558
搜索
查看: 1018|回复: 0
打印 上一主题 下一主题

Activity生命周期:管理应用界面的法则

[复制链接]

1185

主题

1190

帖子

8017

积分

abc

Rank: 9Rank: 9Rank: 9

积分
8017
跳转到指定楼层
楼主
发表于 2025-2-14 09:33:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在安卓开发中,Activity 是一个非常重要的组件,主要用于以下几个方面:

  1. 用户界面展示:每个 Activity 通常代表一个完整的屏幕或界面,用户与应用的交互主要通过 Activity 实现。例如,一个邮件应用可能包含一个显示邮件列表的 Activity,以及另一个用于阅读邮件内容的 Activity。

  2. 生命周期管理:Activity 有一个生命周期,即创建、启动、恢复、暂停、停止和销毁等状态。开发者可以通过重写 Activity 的生命周期方法,来管理资源、保存状态等,确保应用的流畅运行和良好的用户体验。

  3. 组件交互:Activity 可以启动其他 Activity,也可以向其他组件(如 Service、BroadcastReceiver)发送消息,实现组件间的交互。

  4. 事件处理:Activity 可以响应用户的输入事件,比如触摸屏幕、点击按钮等,并作出相应的处理。

在你的代码示例中,activity 类模拟了安卓的 Activity,主要负责创建和显示用户界面、管理视图组件以及处理点击事件等。通过 onCreate 方法进行初始化,setContentView 方法设置界面布局,findViewById 方法查找特定的视图组件,并通过这些组件的 setOnClickListener 方法来处理用户点击操作。此外,代码还展示了如何在新线程中运行耗时操作,以及如何确保在 UI 线程中更新用户界面。

第一个例子说明:

new activity().close()

var ac = new activity();
ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1"
                android:text="关闭" />
        </LinearLayout>`, null
    );

    ac.setContentView(view);
    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        ac.close(); // 关闭活动的操作
    });
});

// 显示活动
ac.show();
  1. 创建活动对象:var ac = new activity(); 创建一个新的活动对象。

  2. 设置活动布局:通过 ac.inflate 方法设置 XML 布局,XML 定义了一个按钮。

  3. 设置按钮的点击事件:找到按钮 button1,并设置点击监听器。在监听器中调用 ac.close() 方法来关闭活动。

  4. 显示活动:通过 ac.show() 方法显示活动。

请确保你的 activity 类定义了 close 和 show 方法,否则调用会失败。

第二个例子说明:

new activity().findViewById(‘button1’)

var ac = new activity();
ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1"
                android:text="关闭" />
        </LinearLayout>`, null
    );

    ac.setContentView(view);
    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        ac.close();
    });
});

ac.show();

以上代码是在活动显示时创建一个按钮,点击按钮后关闭当前活动。
ac.close(); 是用于关闭或销毁活动的假设函数。
findViewById(‘button1’) 查找布局中定义的按钮并返回其引用,以便在代码中操控。

这些代码片段和概念是用于说明布局和事件处理如何基于活动对象进行操作的,具体实现和功能是需要在对应的框架中支持的。

第三个例子说明:

new activity().findWebViewById(‘web1’)

var ac = new activity();
ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <WebView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/web1" />
        </LinearLayout>`, null
    );


    ac.setContentView(view);
    var webView = ac.findWebViewById('web1');

    // 在 WebView 中加载一个 URL
    webView.loadUrl("https://www.baidu.com");
});


ac.show();

说明

activity 类的实例化: 创建了一个 activity 对象。

onCreate 方法: 设置界面的布局,包含一个 WebView。

findWebViewById 方法: 用来获取布局中 ID 为 web1 的 WebView 实例。

WebView 操作: 对找到的 WebView 执行操作,例如加载一个网页。

这种方法通常用于动态获取并操作 UI 控件,但请注意,具体细节和方法需要根据实际的 Android 或自定义 API 而定。

第四个例子说明:

new activity().getActivity()

var ac = new activity();
ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1"
                android:text="开始" />
        </LinearLayout>`, null
    );


    ac.setContentView(view);
    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        // 耗时代码必须在新线程中运行
        var t1 = new thread();
        t1.runJsCode(() => {
            console.log("测试ui");
        }, "线程1");
    });
});


ac.show();
  • activity():此类的实例化用于管理界面生命周期和视图。
  • onCreate:在活动创建时执行的回调函数,用于初始化视图。
  • inflate:加载 XML 布局并生成视图层次结构。
  • setContentView:将指定的视图作为活动的内容视图。
  • findViewById:获取布局中的特定视图,此例用于按钮。
  • setOnClickListener:设置按钮点击事件的监听器。
  • Thread:创建新线程以避免阻塞主线程。
  • runJsCode:在新线程中执行指定的 JavaScript 代码。
  • show:显示活动。

如果 activity、thread 以及其他对象未定义,确保相关的库或框架已经正确引入并配置。
第五个例子说明:

function Activity() {
    this.rootView = {
        // 模拟视图对象
        render: function() {
            console.log("Rendering the root view!");
        }
    };
}

Activity.prototype.getView = function() {
    return this.rootView;
};

// 示例
var ac = new Activity();
var rootView = ac.getView();
rootView.render();  // 输出: Rendering the root view!

说明

Activity 类: 我们定义了一个简单的Activity类,它内部包含一个rootView对象,用来模拟根视图。

getView 方法: 此方法返回rootView,代表整个活动的视图。

使用示例: 我们创建了Activity的一个实例,调用getView方法获取视图,然后调用render方法来模拟渲染该视图。

第六个例子说明:

new activity().inflate(‘’,ViewGroup)

var ac = new activity();


ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello, World!  AIWROK" />
        </LinearLayout>`, 
        null // 在这里传入父ViewGroup,如果有需要的话
    );


    ac.setContentView(view);
});


ac.show();

说明:

  1. Activity 创建

    • var ac = new activity();:创建一个新的活动实例。
  2. onCreate 方法

    • 使用 ac.onCreate(() => { ... }) 定义当活动创建时的行为。
  3. 视图填充和设置

    • ac.inflate(...):通过XML字符串来定义布局视图。
    • ac.setContentView(view);:将填充的视图设置为活动的内容视图。
  4. 按钮查找和监听器

    • var btn1 = ac.findViewById("button1");:找到布局中定义的按钮。
    • btn1.setOnClickListener(() => { ... }):为按钮设置点击监听器。
  5. 线程

    • var t1 = new thread();:创建一个新的线程。
    • t1.runJsCode(...);:在线程中运行JavaScript代码。
  6. 显示活动

    • ac.show();:显示活动的界面。

第七个例子说明:

new activity().inflateSxml(‘’,ViewGroup)

var ac = new activity();

ac.onCreate(() => {

    // 使用 XML 字符串创建视图
    var view = ac.inflateSxml(`
        <vertical>
            <button id="button1" text="第一个按钮"/>
            <button text="第二个按钮"/>
        </vertical>
    `, null);

    // 设置活动的内容视图
    ac.setContentView(view);

    // 寻找按钮并设置点击事件监听器
    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {

        // 事件处理代码需要运行在新线程中
        var t1 = new thread();
        t1.runJsCode(() => {
            println("测试UI");
        }, "线程1");

    });

});

// 显示活动
ac.show();

这个示例展示了如何使用 inflateSxml 方法将 XML 转换为视图对象。以下是代码的详细说明:

创建活动实例

    var ac = new activity();
  1. 在 onCreate 方法中装载布局

    ac.onCreate(() => {
        var view = ac.inflateSxml(`
            <vertical>
                <button id="button1" text="第一个按钮"/>
                <button text="第二个按钮"/>
            </vertical>`, null);
        ac.setContentView(view);
    });
    

inflateSxml:用于解析 XML 字符串并转换为视图对象。
setContentView:设置当前活动的内容视图。

  1. 设置按钮点击事件

    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        // 耗时代码必须在新线程中运行
        var t1 = new thread();
        t1.runJsCode(() => {
            println("测试UI")
        }, "线程1");
    });
    

findViewById:获取视图中 ID 为 button1 的按钮。
setOnClickListener:设置按钮的点击事件。
使用新线程运行耗时操作,确保界面流畅。

  1. 显示活动

    ac.show();
    

    show:用于显示指定的活动。

这个示例展示了如何使用 JavaScript 模拟 Android 活动中的基本操作,包括布局加载和事件处理。

第八个例子说明:

new activity().loadLayoutFile(‘’)

// 初始化一个activity页面
var ac = new activity();

// 加载XML布局文件并显示UI
ac.loadLayoutFile("/代码/layout.xml");

// 可以在加载完布局后进行其他UI控件的操作
// 例如,找到一个按钮并设置点击事件
// var button = ac.findViewById("button_id");
// button.setOnClickListener(() => {
//     printl("按钮被点击");
// });

// 显示activity
ac.show();

请根据实际需要替换”/代码/layout.xml”为你的XML文件的实际路径。上述代码示例需要在支持这一API的环境下执行。

第九个例子说明:

new activity().loadSXML(`    <vertical>
        <button text="第一个按钮"/>
        <button text="第二个按钮"/>
    </vertical>`)

loadSXML 方法:用于加载类 XML 布局代码。它支持较简单的 UI 布局。
参数 arg0:接受类 XML 布局代码的字符串。
示例中,创建了一个 vertical 布局,其中包含两个按钮,每个按钮显示不同的文本。

第十个例子说明:

// 加载xml文件并显示UI
var ac = new activity();
ac.loadLayoutFile("/代码/layout.xml");

// 加载简版xml
var ac = new activity();
ac.loadSXML(`
    <vertical>
        <button text="第一个按钮"/>
        <button text="第二个按钮"/>
    </vertical>
`);

// 加载xml
var ac = new activity();
ac.loadXML(`
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="8dp">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button1"
        android:text="开始" />
</LinearLayout>
`);

这段代码展示了如何通过三种不同的方式加载和显示XML布局文件。以下是每种方式的说明:

  1. 加载XML文件并显示UI:

    var ac = new activity();
    ac.loadLayoutFile("/代码/layout.xml");
    

这段代码创建了一个新的活动activity,并通过loadLayoutFile方法加载位于路径/代码/layout.xml的布局文件,用于显示UI。

  1. 加载简版XML:

    var ac = new activity();
    ac.loadSXML(`
        <vertical>
            <button text="第一个按钮"/>
            <button text="第二个按钮"/>
        </vertical>
    `);
    

这段代码展示了如何在代码中直接定义XML布局字符串并加载显示。使用loadSXML方法可以加载简版的XML布局。在这个例子中,定义了一个垂直布局(vertical),其中包含两个按钮(button)。

  1. 加载XML:

    var ac = new activity();
    ac.loadXML(`
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="8dp">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/button1"
            android:text="开始" />
    </LinearLayout>
    `);
    

这段代码使用loadXML方法加载一段标准的Android XML布局定义。在这个布局中,使用了LinearLayout作为根布局,它是一个垂直的线性布局,包含一个按钮。按钮的宽度设为match_parent,高度为wrap_content,显示文字为“开始”,“id”用于唯一标识。

这种技术可以在自动化脚本和应用程序开发中快速创建UI布局。

第十一个例子说明:

new activity().onCreate(Function)

var ac = new activity();


ac.onCreate(() => {


    var view = ac.inflateSxml(`
        <vertical>
            <button id="button1" text="点击我"/>
        </vertical>
    `, null);


    ac.setContentView(view);


    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        println("按钮被点击了");
    });


});


ac.show();

这段代码创建了一个 Android 活动,并在活动中创建了一个简单的界面和事件监听器。以下是代码的详细说明:

  1. 创建活动实例:

    var ac = new activity();
    

这里创建了一个新的 activity 对象实例,代表一个活动(Activity)。

  1. 定义活动创建时的行为:

    ac.onCreate(() => {
        ...
    });
    

使用 onCreate 方法指定活动创建时要执行的代码。

  1. 加载布局:

    var view = ac.inflateSxml(`
        <vertical>
            <button id="button1" text="点击我"/>
        </vertical>
    `, null);
    

使用 inflateSxml 方法以 XML 字符串的形式定义了一个简单的用户界面布局,其中包含一个垂直布局和一个按钮。

  1. 设置内容视图:

    ac.setContentView(view);
    

设置当前活动的内容视图为刚才创建的布局。

  1. 查找按钮并设置点击事件监听器:

    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        println("按钮被点击了");
    });
    

查找布局中的按钮,并为其设置一个点击事件监听器,按钮点击时会在控制台输出 “按钮被点击了”。

  1. 显示活动:

    ac.show();
    

显示活动,使用户界面可见。

此代码展示了如何在 Android 中创建简单的用户界面并响应用户的点击事件。

第十二个例子说明:

new activity().runOnUiThread(function fun(){
  //这里写代码
  printl('UI线程执行代码') 

})

var ac = new activity();


ac.onCreate(() => {
    var view = ac.inflateSxml(`
        <vertical>
            <button id="button1" text="点击我"/>
        </vertical>
    `, null);


    ac.setContentView(view);


    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        // 点击按钮时在 UI 线程中运行代码
        ac.runOnUiThread(() => {
            printl("UI线程执行代码");
        });
    });
});


ac.show();

说明

  1. Activity 创建:

    • 创建一个新的 activity 实例,并在其 onCreate 方法中定义初始化代码。
  2. 视图布局:

    • 使用 inflateSxml 定义一个简单的布局,包括一个按钮。
    • 调用 setContentView 方法将布局设置为当前活动的内容视图。
  3. 按钮点击事件:

    • 使用 findViewById 方法找到布局中的按钮。
    • 给按钮设置一个点击事件监听器。
  4. 运行 UI 线程代码:

    • 在按钮点击时,调用 runOnUiThread 方法,这将确保指定的代码在 UI 线程上执行。
    • println 方法用于输出一条日志消息,表示代码在 UI 线程中执行。

第十三个例子说明:

new activity().setContentView(View)

function Activity() {}

Activity.prototype.onCreate = function(callback) {
    console.log("Activity Created");
    callback();
};

Activity.prototype.runOnUiThread = function(callback) {
    // 模拟在UI线程中执行callback
    setTimeout(callback, 0);
};

// 添加setContentView方法
Activity.prototype.setContentView = function(view) {
    console.log("视图对象已设置:", view);
};

// 创建一个新的活动实例
var myActivity = new Activity();

myActivity.onCreate(function() {
    console.log("回调函数被调用");

    // 设置视图对象
    myActivity.setContentView("Main View");

    myActivity.runOnUiThread(function() {
        console.log("UI线程中运行的代码");
    });
});

这个代码定义了一个模拟的 Activity 类,并为其添加了 onCreate 和 runOnUiThread 方法。以下是代码的逐步解析:

  1. 定义Activity类:

    function Activity() {}
    

这是一个构造函数,用于创建 Activity 的实例。

  1. 定义onCreate方法:

    Activity.prototype.onCreate = function(callback) {
        console.log("Activity Created");
        callback();
    };
    

    这个方法接受一个回调函数作为参数。当被调用时,它会输出 “Activity Created”,然后执行传入的回调函数。

  2. 定义runOnUiThread方法:

    Activity.prototype.runOnUiThread = function(callback) {
        // 模拟在UI线程中执行callback
        setTimeout(callback, 0);
    };
    

此方法也接受一个回调函数作为参数。借助 setTimeout 模拟在UI线程中异步执行回调。

  1. 创建实例并调用方法:

    var myActivity = new Activity();
    
    myActivity.onCreate(function() {
        console.log("回调函数被调用");
        myActivity.runOnUiThread(function() {
            console.log("UI线程中运行的代码");
        });
    });
    

创建 Activity 的实例 myActivity。
调用 onCreate,传入一个回调函数,在回调中输出 “回调函数被调用”。
使用 runOnUiThread 运行另一个回调,模拟在UI线程中运行,并输出 “UI线程中运行的代码”。

这个代码展示了如何使用回调函数和异步执行来模拟Activity生命周期中的某些行为。

第十四个例子说明:

new activity().show()

var ac = new activity();
ac.onCreate(() => {
    var view = ac.inflate(
        `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1"
                android:text="开始" />
        </LinearLayout>`, null
    );


    ac.setContentView(view);
    var btn1 = ac.findViewById("button1");
    btn1.setOnClickListener(() => {
        // 耗时代码必须在新线程中运行
        var t1 = new thread();
        t1.runJsCode(() => {
            printl("测试ui");
        }, "线程1");
    });
});


ac.show();

这段代码定义了一个新的活动activity,并在活动创建时设置了一个简单的用户界面。用户界面包含一个按钮,点击按钮时,会在一个新线程中执行代码,输出“测试ui”。具体说明如下:

  1. 活动对象创建: var ac = new activity(); 创建新的活动实例。

  2. onCreate 方法: ac.onCreate(() => {...}) 定义活动的创建逻辑。在这里,你通过 inflate 方法设置了一个线性布局 LinearLayout,包含一个按钮。

  3. 按钮点击监听:

    • 使用 findViewById 找到按钮。
    • 使用 setOnClickListener 为按钮设置点击事件监听器。
    • 点击时,创建一个新线程 new thread(),在其中执行 runJsCode 方法,这个方法将会输出文本“测试ui”。
  4. 显示活动: ac.show(); 最后这行代码用于显示这个活动。

总体来说,这段代码实现了一个简单的UI交互,当用户点击按钮时,会在后台线程中打印“测试ui”。请注意,确保activity类及相关方法在你的环境中已正确定义,否则可能会出现错误。

以下所有例子代码集合起来,让后面AI智能体抓取例子。

// 定义 activity 类
function activity() {
    this.rootView = null;
}


activity.prototype.onCreate = function(callback) {
    console.log("Activity Created");
    callback();
};


activity.prototype.setContentView = function(view) {
    console.log("视图对象已设置:", view);
    this.rootView = view;
};


activity.prototype.show = function() {
    console.log("显示活动");
    if (this.rootView) {
        console.log("活动视图:", this.rootView);
    } else {
        console.log("没有设置视图对象");
    }
};


activity.prototype.close = function() {
    console.log("关闭活动");
};


activity.prototype.inflate = function(layoutString, parent) {
    console.log("加载布局:", layoutString);
    // 这里假设返回一个视图对象
    return layoutString;
};


activity.prototype.inflateSxml = function(layoutString, parent) {
    console.log("加载简版布局:", layoutString);
    // 这里假设返回一个视图对象
    return layoutString;
};


activity.prototype.loadLayoutFile = function(path) {
    console.log("加载布局文件:", path);
    // 这里假设返回一个视图对象
    return path;
};


activity.prototype.loadSXML = function(layoutString) {
    console.log("加载简版布局文件:", layoutString);
    // 这里假设返回一个视图对象
    return layoutString;
};


activity.prototype.loadXML = function(layoutString) {
    console.log("加载标准布局文件:", layoutString);
    // 这里假设返回一个视图对象
    return layoutString;
};


activity.prototype.findViewById = function(id) {
    console.log("查找视图组件:", id);
    // 这里假设返回一个视图组件对象
    return {
        setOnClickListener: function(callback) {
            console.log("设置点击事件监听器");
            callback();
        }
    };
};


activity.prototype.findWebViewById = function(id) {
    console.log("查找 WebView 组件:", id);
    // 这里假设返回一个 WebView 组件对象
    return {
        loadUrl: function(url) {
            console.log("加载 URL:", url);
        }
    };
};


activity.prototype.runOnUiThread = function(callback) {
    console.log("在 UI 线程中运行代码");
    callback();
};


// 定义 thread 类
function thread() {}


thread.prototype.runJsCode = function(callback, threadName) {
    console.log("运行线程:", threadName);
    callback();
};


// 示例代码整合
function main() {
    // 第一个例子
    var ac1 = new activity();
    ac1.onCreate(() => {
        var view1 = ac1.inflate(
            `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="8dp">
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/button1"
                    android:text="关闭" />
            </LinearLayout>`, null
        );


        ac1.setContentView(view1);
        var btn1 = ac1.findViewById("button1");
        btn1.setOnClickListener(() => {
            ac1.close(); // 关闭活动的操作
        });
    });


    ac1.show();


    // 第二个例子
    var ac2 = new activity();
    ac2.onCreate(() => {
        var view2 = ac2.inflate(
            `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="8dp">
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/button1"
                    android:text="关闭" />
            </LinearLayout>`, null
        );


        ac2.setContentView(view2);
        var btn1 = ac2.findViewById("button1");
        btn1.setOnClickListener(() => {
            ac2.close();
        });
    });


    ac2.show();


    // 第三个例子
    var ac3 = new activity();
    ac3.onCreate(() => {
        var view3 = ac3.inflate(
            `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="8dp">
                <WebView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/web1" />
            </LinearLayout>`, null
        );


        ac3.setContentView(view3);
        var webView = ac3.findWebViewById("web1");


        // 在 WebView 中加载一个 URL
        webView.loadUrl("https://www.baidu.com");
    });


    ac3.show();


    // 第四个例子
    var ac4 = new activity();
    ac4.onCreate(() => {
        var view4 = ac4.inflate(
            `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="8dp">
                <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/button1"
                    android:text="开始" />
            </LinearLayout>`, null
        );


        ac4.setContentView(view4);
        var btn1 = ac4.findViewById("button1");
        btn1.setOnClickListener(() => {
            // 耗时代码必须在新线程中运行
            var t1 = new thread();
            t1.runJsCode(() => {
                console.log("测试ui");
            }, "线程1");
        });
    });


    ac4.show();


    // 第五个例子
    function Activity() {
        this.rootView = {
            // 模拟视图对象
            render: function() {
                console.log("Rendering the root view!");
            }
        };
    }


    Activity.prototype.getView = function() {
        return this.rootView;
    };


    var ac5 = new Activity();
    var rootView = ac5.getView();
    rootView.render();  // 输出: Rendering the root view!


    // 第六个例子
    var ac6 = new activity();


    ac6.onCreate(() => {
        var view6 = ac6.inflate(
            `<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="8dp">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Hello, World!  AIWROK" />
            </LinearLayout>`,
            null // 在这里传入父ViewGroup,如果有需要的话
        );


        ac6.setContentView(view6);
    });


    ac6.show();


    // 第七个例子
    var ac7 = new activity();


    ac7.onCreate(() => {
        // 使用 XML 字符串创建视图
        var view7 = ac7.inflateSxml(`
            <vertical>
                <button id="button1" text="第一个按钮"/>
                <button text="第二个按钮"/>
            </vertical>
        `, null);


        // 设置活动的内容视图
        ac7.setContentView(view7);


        // 寻找按钮并设置点击事件监听器
        var btn1 = ac7.findViewById("button1");
        btn1.setOnClickListener(() => {
            // 事件处理代码需要运行在新线程中
            var t1 = new thread();
            t1.runJsCode(() => {
                console.log("测试UI");
            }, "线程1");
        });
    });


    // 显示活动
    ac7.show();


    // 第八个例子
    var ac8 = new activity();


    // 加载XML布局文件并显示UI
    ac8.loadLayoutFile("/代码/layout.xml");


    // 显示activity
    ac8.show();


    // 第九个例子
    var ac9 = new activity();
    ac9.loadSXML(`    
        <vertical>
            <button text="第一个按钮"/>
            <button text="第二个按钮"/>
        </vertical>
    `);


    // 第十个例子
    var ac10a = new activity();
    ac10a.loadLayoutFile("/代码/layout.xml");


    var ac10b = new activity();
    ac10b.loadSXML(`
        <vertical>
            <button text="第一个按钮"/>
            <button text="第二个按钮"/>
        </vertical>
    `);


    var ac10c = new activity();
    ac10c.loadXML(`
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="8dp">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/button1"
                android:text="开始" />
        </LinearLayout>
    `);


    // 第十一个例子
    var ac11 = new activity();


    ac11.onCreate(() => {
        var view11 = ac11.inflateSxml(`
            <vertical>
                <button id="button1" text="点击我"/>
            </vertical>
        `, null);


        ac11.setContentView(view11);


        var btn1 = ac11.findViewById("button1");
        btn1.setOnClickListener(() => {
            console.log("按钮被点击了");
        });
    });


    ac11.show();


    // 第十二个例子
    var ac12 = new activity();


    ac12.onCreate(() => {
        var view12 = ac12.inflateSxml(`
            <vertical>
                <button id="button1" text="点击我"/>
            </vertical>
        `, null);


        ac12.setContentView(view12);


        var btn1 = ac12.findViewById("button1");
        btn1.setOnClickListener(() => {
            // 点击按钮时在 UI 线程中运行代码
            ac12.runOnUiThread(() => {
                console.log("UI线程执行代码");
            });
        });
    });


    ac12.show();
}


main();

集合代码意思,这段代码定义了一个简单的JavaScript模拟框架,用于模拟Android应用中的Activity和Thread的行为。主要功能包括:

  1. Activity类:

    • onCreate(callback): 当活动创建时调用,传入一个回调函数。
    • setContentView(view): 设置活动的根视图。
    • show(): 显示活动及其视图。
    • close(): 关闭活动。
    • inflate(layoutString, parent): 从布局字符串创建视图。
    • inflateSxml(layoutString, parent): 从简版布局字符串创建视图。
    • loadLayoutFile(path): 从文件路径加载布局。
    • loadSXML(layoutString): 加载简版布局文件。
    • loadXML(layoutString): 加载标准布局文件。
    • findViewById(id): 根据ID查找视图组件,并可以设置点击事件监听器。
    • findWebViewById(id): 根据ID查找WebView组件,并可以加载URL。
    • runOnUiThread(callback): 在UI线程中运行代码。
  2. Thread类:

    • runJsCode(callback, threadName): 运行JavaScript代码在一个新线程中,传入回调函数和线程名。
  3. 示例代码:

    • 创建多个activity对象,每个对象在onCreate方法中设置视图内容,包括按钮和WebView。
    • 通过findViewById和findWebViewById方法查找视图组件,并为按钮设置点击事件。
    • 在某些点击事件中,通过runJsCode方法在一个新线程中运行代码。
    • 使用loadLayoutFile、loadSXML和loadXML方法加载不同的布局文件。
  4. 输出:

    • 代码中包含大量的console.log语句,用于输出各个方法的调用和执行过程,模拟了Android应用中Activity和Thread的生命周期和行为。

这个框架主要用于学习和测试目的,帮助开发者理解如何在JavaScript中模拟Android的活动和线程机制。

回复

使用道具 举报

本版积分规则

关闭

QQ|»营销软件综合讨论|»营销软件有问必答|»营销软件教程专区|»营销软件POST脚本分享|»营销软件普通脚本分享|»营销软件软件资讯|»营销软件精品软件|»营销软件更新公告|营销软件|B2B软件|B2B网络软件 ( 京ICP备09078825号 )本网站开发的营销软件是一款新的网络营销软件,这款营销可以去网站软件,博客软件,B2B软件,分类信息网发贴,可以抢沙发,可以到百度文库上传WORD文档,可以到一些是相册网站自动上传图片,这个自动发帖软件自带云蜘蛛,加快收录,有6种对接打码接口,方便,效率高,速度快,而且对拖动的验证码全网第一家独家支持,全部原创技术,独家研发,正版原创带版权软件。选择万能营销软件,就选择了一种赚钱的效率,从没有被超越过,一直在努力研发新技术。放飞梦想,解放双手,来点创意,成就你的梦想,就在万能营销软件开始

map2

GMT+8, 2026-9-30 17:39 , Processed in 0.552614 second(s), 33 queries .

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