第二次写

Android Studio与夜神模拟器开发调试
1. 什么是夜神模拟器?
夜神模拟器是北京多点在线科技有限公司开发的一款Android手机游戏模拟器,
运行速度快,使用方便,是一款PC平台玩手游,助攻Android开发的利器

  1. 使用Android Studio与夜神模拟器开发调试
    2.1 启动android studio
    2.2 启动夜神模拟器
    2.2.1 cmd打开命令行窗口
    2.2.2 切换到夜神安装目录,例如:D:\Program Files\Nox\bin
    2.2.3 执行命令连接模拟器
    nox_adb.exe connect 127.0.0.1:62001

    2.3 在Android Studio窗口上点击run ‘app’(或shift+F10),点击OK即可在模拟器上运行app
    注:通过shift+F10可查看设备(手机/平板/模拟器)的连接情况

  2. 简化夜神连接
    3.1 在系统环境变量path中添加nox_adb.exe文件的路径,我的路径为:“D:\Program Files\Nox\bin”

    3.2 再创建nox.bat文件,并写入以下代码,这样每次双击就会自动连接
    nox_adb.exe connect 127.0.0.1:62001

  3. Android的基本组件
    1.1 Activity
    1.1.1 Activity代表手机的一个屏幕
    1.1.2 一个Android程序由多个Activity组成,即:一个Android程序由多屏内容组成
    1.1.3 Activity相当于一个展板,本身没有可视的内容,你把画(View)贴到展板上就可以展示出来了
    1.2 Service
    1.2.1 不可见的组件
    1.2.2 在后台运行
    1.2.3 为其他组件提供后台服务
    1.2.4 监控其他组件的运行状态
    1.2.5 后台播放音乐
    1.3 BroadcastReceiver:广播消息监听器
    1.3.1 作用:用来监听广播,eg:收短信的广播 往手机推送消息
    1.4 ContentProvider:内容提供者
    1.4.1 帮助不同的应用程序间交换数据,eg:获取通讯录信息
    1.5 Intent和IntentFilter 意图
    Activity、Service、BroadcastReceiver之间通信的载体,传递数据

  4. View和ViewGroup介绍
    View类似于swing中的JPanel,代表一个空白的矩形区域,Android应用中的绝大部分UI组件都继承于View或其子类
    View还一个重要的子类ViewGroup,它通常作为其它组件的[容器]使

    简单来讲View是所有控件的父控件,ViewGroup可以包含其它的View对象,并且是所有布局控件的父类
    Activity相当于一个展板,本身没有可视的内容,你把画(View)贴到展板上就可以展示出来了
    setContentView(view)

  5. 自定义视图(onDraw)
    3.1 颜色四种设置方式
    canvas.drawColor(Color.RED);//系统颜色(Color.RED)

    canvas.drawColor(Color.rgb(100, 150, 200));//rgb
    canvas.drawColor(Color.argb(100, 100, 150, 200));//argb,其中第一参数为透明度
    canvas.drawColor(Color.parseColor(“#44E21D”));//16进制
    3.2 画板背景
    canvas.drawColor(Color.BLUE)
    3.3 画笔设置
    3.3.1 实心或空心
    paint.setStyle(Style.FILL);//实心
    paint.setStyle(Style.STROKE);// 空心
    3.3.2 粗细
    paint.setStrokeWidth(10)
    3.3.3 抗锯齿
    paint.setAntiAlias(true);
    3.3.4 颜色设置
    paint.setColor(Color.parseColor(“#103864”));

  6. 画图形
    4.1 画圆
    canvas.drawCircle(200, 100, 100, paint)
    4.2 画矩形
    canvas.drawRect(0, 200, 200, 400, paint);
    canvas.drawRect(rect, paint);
    左上角、右下角
    4.3 画多边形(三角形)
    4.3.1 drawLine方式
    4.3.2 drawPath方式
    Path
    moveTo(float x, float y):将起始点设置到x,y点
    lineTo(float x, float y):从当前点绘制一条线段到x,y点
    reset():清除path设置的所有属性
    close():回到初始化形成封装的曲线
    4.3.3 如果画笔为实心,画线与Path方式的区别
    drawLine=空心,drawPath=实心
    4.5 画文字
    drawText()
    paint.setTextSize(50);// 设置文字大,单位为dp
    4.6 画图
    drawBitmap 位图
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.qq);
    注意事项:图片名不能是汉字或空格

  7. 什么时候要子类中通过super再调用父类的方法呢?(重要重要)
    如果父方法中有代码就要如此~如果父方法中有代码就要如此~如果父方法中有代码就要如此
    重要的事情说三遍,例如:onDraw可以不用再重新调用super.onDraw(),因为父方法中一行代码都没有

    注1:其实最简单的办法就是不管三七二十一,都调用super.xxx()方法即可

安卓工程目录
模块
manifests
仅有一个文件,系统清单文件,相当于web.xml
java
放源文件
res(放系统资源文件,一个很重要的的类R,自动生成,resource的缩写)
drawable(放图片资源)
layout(放布局文件)

dp(密度,相当于width中的百分比)
sp(密度,相当于width中的的数值xxx.px)

解决问题
Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’. > Conflict with dependency ‘com.and
https://blog.youkuaiyun.com/fighting_2017/article/details/80244982

### 实现C#方法向PLC地址入0和1并交替执行的心跳逻辑 以下是实现该功能的一个可能方案。此方法利用循环不断切换目标地址中的值(0 和 1),从而模拟心跳信号的功能。 #### 方法设计 定义一个异步方法 `StartHeartbeat`,它接受两个参数:一个是表示PLC通信对象的实例(假设为 `PlcCommunication` 类型),另一个是要操作的目标地址字符串。通过无限循环,在每次迭代中分别入0和1到指定地址,并设置适当的延迟时间来控制心跳频率。 ```csharp using System; using System.Threading.Tasks; public class PlcHeartbeatSimulator { public async Task StartHeartbeat(PlcCommunication plc, string targetAddress, int delayMilliseconds = 1000) { bool currentValue = false; // 初始值设为false (即0) while (true) { try { await WriteToPlc(plc, targetAddress, currentValue ? 1 : 0); // 将当前布尔值转换成整数形式入PLC Console.WriteLine($"Wrote {(currentValue ? 1 : 0)} to {targetAddress} at {DateTime.Now}"); currentValue = !currentValue; // 取反以准备下一次入相反数值 await Task.Delay(delayMilliseconds); // 设置延时作为心跳周期的一部分 } catch (Exception ex) { Console.Error.WriteLine($"Error during heartbeat operation: {ex.Message}"); break; // 如果发生异常,则停止心跳模拟 } } } private static async Task WriteToPlc(PlcCommunication plc, string address, int value) { // 调用实际的PLC入函数,这里假定存在WriteInt方法可以完成这一任务 await plc.WriteInt(address, value); } } // 假想的PLC通信类接口 public interface PlcCommunication { Task WriteInt(string address, int value); } ``` 以上代码片段展示了如何创建一个简单的方法来进行PLC地址上的连续读/操作,以此模仿心跳行为。注意这里的具体细节可能会依据所使用的PLC品牌及其SDK有所变化[^1]。 #### 关键点说明 - **异步处理**:由于涉及到I/O操作,采用异步模式能够有效防止阻塞主线程。 - **错误管理**:增加了基本的异常捕获机制以便于诊断可能出现的问题。 - **性能考量**:可以根据实际情况调整`delayMilliseconds`参数来改变心跳速率[^2]。 #### 测试部署建议 在正式环境中应用前,请务必先在一个受控环境下进行全面测试,确保不会对现有生产流程造成干扰或损害。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值