注册 登录
发贴工具
查看: 75|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] Activity间通信:安卓开发中的数据传递

[复制链接]

2227

主题

2275

帖子

1万

积分

积分
13566
跳转到指定楼层
楼主

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

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

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

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

  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"
            androidrientation="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"
            androidrientation="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"
            androidrientation="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"
            androidrientation="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:显示活动。

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

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"
            androidrientation="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"
    androidrientation="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"
        androidrientation="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"
            androidrientation="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"
                androidrientation="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"
                androidrientation="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。
    • 通过findViewByIdfindWebViewById方法查找视图组件,并为按钮设置点击事件。
    • 在某些点击事件中,通过runJsCode方法在一个新线程中运行代码。
    • 使用loadLayoutFileloadSXMLloadXML方法加载不同的布局文件。
  4. 输出

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

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


unto安卓窗体[activity]第一集合nextAIWORK模拟点击功能: 实现精准的屏幕点击
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖